【问题标题】:WPF: Applying multiple data templates?WPF:应用多个数据模板?
【发布时间】:2014-12-09 21:15:48
【问题描述】:

假设我正在显示一个数据组件,例如 TreeView。

假设它绑定到一个基本类型为 TreeViewItem 的树结构。

TreeViewItem
    TreeViewItem
    TreeViewItem
        TreeViewItem

等等。

但其中一些项目是 TreeViewItem 的更具体的实现,例如 AnimalTreeViewItem 甚至更细化的 ZebraTreeViewItem

TreeViewItem
    AnimalTreeViewItem
        ZebraTreeViewItem
    PlantTreeViewItem

现在,假设我希望这些项目以类似的方式呈现,但根据底层类型的不同,呈现方式会略有不同。

我得到这个工作的一种方法是使用 DataTemplate。

问题是我必须为每种类型创建一个单独的模板,100% 的内容以相同的方式定义(减去布局/颜色等方面的微小差异)

有没有办法定义数据模板,将它们的大部分内容共享在一起?意思是,无需创建 2 个模板,它们的标记几乎相同,只是为了更改某些文本框等的背景颜色。

【问题讨论】:

    标签: wpf xaml datatemplate


    【解决方案1】:

    您可能对this article 中显示的解决方案感兴趣。如果两者之间的差异很小,它就可以正常工作,例如某些元素的颜色不同,但它也可以通过使用触发器来处理更复杂的场景。

    【讨论】:

    • +1 用于附加属性中的继承值。直到现在才知道。
    【解决方案2】:

    这个问题的答案是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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2021-12-25
      相关资源
      最近更新 更多