【问题标题】:Multiple ResourceDictionary with same DataTemplate key?具有相同 DataTemplate 键的多个 ResourceDictionary?
【发布时间】:2023-09-17 22:21:01
【问题描述】:

我有一个 ResourceDictionary,例如 (MyResourceDictionary):

<ResourceDictionary xmlns
        .....
        >

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="SeriesTwo.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <DataTemplate x:Key="SeriesDetailedInformation">
            <StackPanel>
                ......content...
            </StackPanel>
        </DataTemplate>
</ResourceDictionary>

SeriesTwo.xaml 看起来像这样,并且还有同名的 DataTemplate

<ResourceDictionary xmlns=
        .....
        >
        <DataTemplate x:Key="SeriesDetailedInformation">
            <DataGrid>
                ......content...
            </DataGrid>
        </DataTemplate>
</ResourceDictionary>

在我的查看页面上,使用了哪个SeriesDetailedInformation 数据模板?这是否取决于我在页面上首先引用的资源字典?

也感谢任何有关此主题的良好链接和其他阅读材料。

【问题讨论】:

    标签: wpf xaml resourcedictionary


    【解决方案1】:

    this page 的几件事似乎与您的问题有关:

    MergedDictionaries 集合中的查找行为搜索 最后添加的 ResourceDictionary 首先,搜索停止 找到了请求的密钥。换句话说,从 合并资源字典的集合是后进先出的。

    还有:

    合并字典中的资源占用资源中的一个位置 在主资源范围之后的查找范围 它们被合并到字典中。

    据此,我了解到您的主字典中定义的 DataTemplate 将首先使用,然后是 SeriesTwo,然后是在 SeriesTwo 之前/之上的任何引用。

    另外,为什么不试试看会发生什么?我维护了一个我称之为“DumbCrapTestApp”的解决方案,当我对某样东西的工作原理感到好奇时,我会在其中测试这样的东西。它有一个控制台应用程序,当我只需要在该语言中测试某些东西时,它还有一个 WPF 和一个 Silverlight 应用程序,当我想在那里尝试某些东西时。如果我需要一个 WinForms 应用程序,我只需添加一个并在那里做我的事情。我只是将我想要测试的任何代码放入相关的应用程序中,将其设置为我的启动项目,然后我就走了。它对于弄清楚这些小事情非常有用,我什至用它来澄清和验证答案,然后再将它们发布在 SO 上。

    【讨论】:

    • 谢谢。和“为什么不试试看会发生什么”....因为我很懒 :p 并且脑子有问题,无法自己看文档。