考虑以下模型:
var model = new object[] { "Ala ma kota", DateTime.Now };
现在,让我们假设,我们为ListBox显示以下DataTemplates显示此模型:
<ListBox ItemsSource="{Binding Data}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type sys:String}">
<StackPanel Orientation="Horizontal">
<TextBlock>String:</TextBlock>
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
<DataTemplate DataType={x:Type sys:DateTime}">
<StackPanel Orientation="Horizontal">
<TextBlock>Data i czas:</TextBlock>
<Calendar DisplayDate={Binding Mode=OneWay}" />
</StackPanel>
</DataTemplate>
</ListBox.Resources>
</ListBox>
如果我们运行这样的程序,将会实现非常有趣的效果:
有没有办法在某个级别禁用DataTemplate
?我想在第二个DataTemplate中“阻止”它,这样日历就会正确显示。
答案 0 :(得分:1)
我能想到的一种方法是 利用WPF中的资源查找行为 。它遍历Visual树,直到找到控件的默认资源。
您可以在DateTime的DataTemplate中为字符串本地定义资源,以便它在本地应用于您的DateTime模板,而对于其他人,它将继续表现相同:
<DataTemplate DataType="{x:Type sys:DateTime}">
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<DataTemplate DataType="{x:Type sys:String}">
<TextBlock Text="{Binding}"/>
</DataTemplate>
</StackPanel.Resources>
<TextBlock>Data i czas:</TextBlock>
<Calendar DisplayDate="{Binding Mode=OneWay}" />
</StackPanel>
</DataTemplate>
输出: