如何使用一个ResourceDictionary导入合并字典的深层次层级?涉及IT技术。

3
我正在尝试合并来自依赖的类库项目的字典,但找不到资源键。请注意:我正在使用Microsoft的Connect bug解决方案,这应该允许框架深入搜索以查找嵌套的资源。但这似乎没有起作用。 失败示例:
<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>

在执行此操作时,它无法找到资源键。如果我手动从该类库中合并每个字典,则可以正常工作。这样做,我认为会开始背离将资源抽象到外部程序集的目的。

成功的示例

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

我把虚拟样式放错地方了吗?这里有些地方不对劲。谢谢查看。


你最终解决了这个问题吗?我也遇到了同样的问题,真的不想采用我找到的那些方法。 - Jay
1个回答

0

我通过花费三天的时间摸索,才学会了这个。

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

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

使用 WPF Inspector 将对您有很大帮助,因为它可以在 WPF 应用程序中跟踪一切。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接