2010-05-09 39 views
2

在我MainWindow.xaml,我有以下参考ResourceDictionary中:为什么我无法在合并的资源字典中找到DataTemplates?

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

在MainSkin.xaml,我定义一个DataTemplate:

<DataTemplate x:Key="TagTemplate"> 
    ... 
</DataTemplate> 
我的应用程序中

更深,我尝试使用此数据模板:

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

代码编译成功,但是当我尝试加载包含此StaticResource的Page或UserControl时,得到一个异常,说无法找到TagTemplate。

我在做什么错?

+0

尝试引用它作为一个DynamicResource – 2010-05-09 20:50:16

+0

@丹如果我将其更改为DynamicResource,它的工作原理,但为什么呢?我看到了几个不同的例子,显示StaticResource在这种情况下工作 - 除非这些例子也有问题。 – dthrasher 2010-05-09 22:26:57

+0

嗨。我本人也会问同样的问题。但这里的答案很好。有没有机会给你找到这些例子的那些资源的链接。我只是在学习XAML,并且对当前项目中的“菊花链式”XAML资源字典非常感兴趣。 – 2012-01-04 00:04:47

回答

3

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

另外,您可以添加这些合并词典来App.xaml和这些资源的隐含:

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

因此,在我的MainWindow中使用的UserControls或DataTemplates无法访问在MainWindow的Window.Resources部分中引用的合并字典中定义的项目?我必须改为使用应用程序资源的一个级别? – dthrasher 2010-05-09 22:21:53

+0

是的,在控件的资源字典中定义的资源只能访问该控件/页面。 – 2010-05-09 22:57:30

0

您是否在声明的同一个窗口中使用该StaticResource?否则,我认为你不能访问那个。

+0

是的。我在MainWindow的Frame中显示的页面中使用了ContentControl。 – dthrasher 2010-05-09 22:23:28