Wpf 为什么可以';我不能在合并的资源字典中找到数据模板吗?

Wpf 为什么可以';我不能在合并的资源字典中找到数据模板吗?,wpf,datatemplate,Wpf,Datatemplate,在my MainWindow.xaml中,我对ResourceDictionary有以下引用: <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="MainSkin.xaml" /> </ResourceDiction

在my MainWindow.xaml中,我对ResourceDictionary有以下引用:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MainSkin.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

在MainSkin.xaml中,我定义了一个数据模板:

<DataTemplate x:Key="TagTemplate">
   ...
</DataTemplate>
<ContentControl DataContext="{Binding Tag}" ContentTemplate="{StaticResource TagTemplate}"/>

...
在我的应用程序中,我尝试使用以下数据模板:

<ContentControl DataContext="{Binding Tag}" ContentTemplate="{StaticResource TagTemplate}"/>

代码编译成功,但当我尝试加载包含此StaticResource的页面或UserControl时,会出现异常,表示找不到TagTemplate


我做错了什么?

您是否在声明静态资源的同一窗口中使用该资源?否则,我认为您无法访问该文件。

为了访问XAML文件中定义的资源的内容,您需要在每个页面中“包括”该XAML文件以及使用该文件的控件。因此,每个XAML文件都需要有MainWindow.XAML中的
MergedDictionaries
条目

或者,您可以将这些合并词典添加到
App.xaml
,这些资源将被隐式包含:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MainSkin.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>


尝试将其引用为DynamicResource@Dan如果我将其更改为DynamicSource,它会工作,但为什么?我已经看到了几个不同的例子,展示了StaticResource在这种情况下的工作——除非这些例子也有bug。我自己也会问同样的问题。但这里的答案是好的。您是否有机会提供一些链接到您在其中找到这些示例的资源。我只是在学习XAML,对当前项目中类似的XAML资源字典“菊花链”非常感兴趣。因此,在我的主窗口中使用的用户控件或数据模板无法访问在主窗口的窗口中引用的合并字典中定义的项。参考资料部分?我必须升一级到应用程序资源?是的,在控件中的资源字典中定义的资源只能由该控件/页访问。是的。我在主窗口的一个框架内显示的页面中使用ContentControl。