4

是否可以将相同的 DataTemplate 用于定义的类型选择,即如何更改以下示例代码以便将相同的 DataTemplate 用于所有列出的类型?

<DataTemplate DataType="{x:Type local:ClassA, ClassB, ...}">
   <StackPanel Orientation="Horizontal">
      <Label Content="{Binding Path=Title}"/>
      ...
   </StackPanel>
</DataTemplate>
4

2 回答 2

10

默认情况下不支持,但通常我将 的内容DataTemplate放在一个UserControl或另一个中DataTemplate(取决于模板的复杂程度),然后为每个类项编写一个 3 行数据模板

<UserControl x:Class="MyUserControl">
   <StackPanel Orientation="Horizontal">
      <Label Content="{Binding Path=Title}"/>
      ...
   </StackPanel>
</UserControl >


<DataTemplate DataType="{x:Type local:ClassA}">
    <local:MyUserControl />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ClassB}">
    <local:MyUserControl />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ClassC}">
    <local:MyUserControl />
</DataTemplate>
于 2012-10-15T16:41:34.040 回答
1

它不支持开箱即用,但可以通过定义自定义 MarkupExtension 来做类似的事情。类似于 x:Type 扩展。

如果在这里,ClassA、ClassB 是从同一个类派生的,您应该能够将基类名称放在这里以引用它们。

于 2012-10-15T16:16:13.020 回答