仅针对某些视图定位DataTemplate

时间:2010-06-14 14:30:08

标签: wpf datatemplate

我在像这样的全局/共享ResourceDictionary中有一个DataTemplate,它定位一个DataType:

<DataTemplate DataType="{x:Type foo:Bar}">
    <!-- My DataTemplate visual tree goes here... -->
</DataTemplate>

这个DataTemplate取代了我所有的foo:我所有视图上的条形类型(UserControls / Windows)。我想要做的是将此模板仅应用于某些视图,保持其他视图不受此DataTemplate的影响。我可以将这个DataTemplate复制到每个视图的Resources部分,但我不想复制/粘贴DataTemplate的内容,这会导致维护问题。

1 个答案:

答案 0 :(得分:2)

您在此处使用的内容称为implicit data template。你要求一个明确的。要实现此目的,您可以使用显式资源键:

<DataTemplate x:Key="MyStyle" DataType="{x:Type foo:Bar}">
    <!-- My DataTemplate visual tree goes here... -->
</DataTemplate>

后来在xaml:

<ContentPresenter ContentTemplate="{StaticResource MyStyle}" .../>

另一种解决方案是在适当的控制/页面内通过Merged Dictiories使用一个资源字典(带有隐式数据模板)。

我更喜欢第一种方法,因为它更容易维护(隐式样式更难以跟踪)。