【问题标题】:How can I import a deep hierarchy of merged dictionaries with 1 ResourceDictionary?如何导入具有 1 个 ResourceDictionary 的合并字典的深层层次结构?
【发布时间】:2013-07-19 15:55:19
【问题描述】:

我正在尝试从依赖类库项目中合并字典,但找不到资源键。 注意:我正在使用this Connect bug workaround from Microsoft,它应该允许框架搜索足够深的内容以找到嵌套资源。这似乎不起作用。

失败示例

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyApplication.ControlLibrary;component/ResourceDictionaries/ResourceLibrary.xaml" />
            <ResourceDictionary>
                <Style TargetType="{x:Type Line}" /> <!-- workaround from MS to allow for this -->
                <Main:AppBootstrapper x:Key="bootstrapper" /> <!-- CaliburnMicro bootstrapper, unsure if this is relevant -->
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

ResourceLibrary.xaml 内部

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="DefaultColorTheme.xaml" />
        <!-- ...snip... -->
        <ResourceDictionary Source="TransitionControl.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

执行此操作时,它找不到资源键。如果我从该类库中手动合并每个字典,它就可以正常工作。 IMO,这开始违背将资源抽象到外部程序集的目的。

成功示例

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyApplication.ControlLibrary;component/ResourceDictionaries/DefaultColorTheme.xaml" />
            <ResourceDictionary Source="/MyApplication.ControlLibrary;component/ResourceDictionaries/Images.xaml" />
            <ResourceDictionary Source="/MyApplication.ControlLibrary;component/ResourceDictionaries/FontIcons.xaml" />      

            <ResourceDictionary>
                <Style TargetType="{x:Type Line}" />
                <Main:AppBootstrapper x:Key="bootstrapper" />
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

我是否将虚拟隐式样式放置在错误的位置?这里没有加起来。感谢观看。

【问题讨论】:

  • 你有没有想过这个问题?我有同样的问题,真的宁愿避免我找到的工作方法。

标签: wpf resourcedictionary


【解决方案1】:

我玩了 3 天,才学会了这一点。

不要做很深的结构。有一个只使用其他字典的主字典。该应用不应访问其他应用的任何内容。

但关键是要以正确的顺序引用它们。如果您加载一个 RD,其中一个内容使用了另一个尚未加载的内容,它将无法工作。顺序真的很关键。

使用WPF Inspector 对您有很大帮助,因为它可以跟踪 WPF 应用程序中的所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2016-06-20
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多