如何使用1个ResourceDictionary导入合并字典的深层次结构?

时间:2013-07-19 15:55:19

标签: wpf resourcedictionary

我正在尝试从依赖类库项目中合并字典,但找不到资源键。 注意:我正在使用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>

Inside 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>

我是否将虚拟隐式样式放在错误的位置?有些东西没有在这里加起来。谢谢你的期待。

1 个答案:

答案 0 :(得分:0)

通过玩了3天,我学到了很多东西。

不要制作非常深的结构。有一个只使用其他词典的主词典。应用程序不应该访问其他任何内容。

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

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