假设我正在显示数据组件,例如TreeView。
假设它绑定到基本类型TreeViewItem的树结构。
TreeViewItem
TreeViewItem
TreeViewItem
TreeViewItem
等等。
但其中一些项目是TreeViewItem的更具体的实现,例如AnimalTreeViewItem,甚至更细粒度的ZebraTreeViewItem
TreeViewItem
AnimalTreeViewItem
ZebraTreeViewItem
PlantTreeViewItem
现在,假设我希望以类似的方式呈现这些项目,但根据底层类型,渲染会略有不同。
我使用DataTemplate的一种方法是使用它。
问题是我必须为每种类型创建一个单独的模板,其中100%的内容以相同的方式定义(减去布局/颜色等方面的微小差异)
有没有办法定义数据模板,它们将大部分内容共享在一起?意思是,不必创建2个模板,它们的标记几乎完全相同,只是为了改变某些文本框的背景颜色等。
答案 0 :(得分:1)
您可能对this article中显示的解决方案感兴趣。如果两者之间的差异较小,则可以正常工作,例如某些元素的颜色不同,但它也可以通过使用触发器处理更复杂的场景。
答案 1 :(得分:0)
这个问题的答案是DataTriggers
<DataTemplate x:Key="myTaskTemplate">
...
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=TaskType}">
<DataTrigger.Value>
<local:TaskType>Home</local:TaskType>
</DataTrigger.Value>
<Setter TargetName="border" Property="BorderBrush" Value="Yellow"/>
</DataTrigger>
</DataTemplate.Triggers>
...
</DataTemplate>
当TaskType为Home时,此数据模板才会被“触发”。
http://msdn.microsoft.com/en-us/library/ms742521.aspx#adding_more_to_datatemplate