对不同类型使用相同的DataTemplate

lio*_*dog 3 c# wpf datatemplate

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

<DataTemplate DataType="{x:Type local:ClassA, ClassB, ...}">
   <StackPanel Orientation="Horizontal">
      <Label Content="{Binding Path=Title}"/>
      ...
   </StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

Rac*_*hel 8

默认情况下不支持此功能,但通常我将内容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>
Run Code Online (Sandbox Code Playgroud)


Nil*_*han 1

它不受开箱即用的支持,但可以通过定义自定义 MarkupExtension 来执行类似的操作。与 x:Type 扩展类似。

如果这里的 ClassA、ClassB 派生自同一个类,您应该能够在此处放置基类名称来引用它们。