wpf - 有没有办法在 WPF 中使用数据模板继承?

标签 wpf xaml datatemplate

是否可以进行DataTemplate组合或继承(类似于样式中的“BasedOn”)?有 2 个实例我需要它。

  1. 对于继承类:我有一个带有多个继承类的基类。我不想在每个派生类的 DataTemplate 中重复基类模板。

  2. 不同的 View :对于同一个类,我想定义一个数据模板,然后根据需要添加到该模板。前任。基本模板将显示对象中的数据,然后我想要不同的模板可以在显示数据时对对象执行不同的操作(继承基本模板)。

最佳答案

我发现做这种事情的唯一方法是:

<DataTemplate x:Key="BaseClass">
  <!-- base class template here -->
</DataTemplate>
<DataTemplate DataType="{x:Type app:BaseClass}">
  <ContentPresenter Content="{Binding}" 
                    ContentTemplate="{StaticResource BaseClass}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type app:DerivedClass}">
  <StackPanel>
    <ContentPresenter Content="{Binding}" 
                      ContentTemplate="{StaticResource BaseClass}"/>
    <!-- derived class extra template here -->
  </StackPanel>
</DataTemplate>

基本上,这创建了一个可以使用键(在本例中为 BaseClass)引用的“通用”模板。然后我们为基类和任何派生类定义真正的 DataTemplate。然后,派生类模板将添加它自己的“东西”。

msdn 上对此进行了一些讨论不久前,但没有人想出比我看到的更好的解决方案。

关于wpf - 有没有办法在 WPF 中使用数据模板继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443600/

相关文章:

c# - 如何将代码隐藏中的自定义对象绑定(bind)到 XAML 中的网格?

c# - ASP.NET 页面可以使用 WPF 控件吗?

c# - 以编程方式将 > 5 MB 的文件上传到 Sharepoint 2013

c# - 从类库项目启动 WPF 窗口

xaml - 视觉诊断被禁用或当前应用程序不支持

.net - 如何为基于 ItemsControl 的控件(如 ListView 或 DataGrid)定义 Empty DataTemplate

silverlight - SL4。 ElementName 绑定(bind)在 DataTemplate 中不起作用

wpf - ViewModel 位置到子文件夹(XAML,命名空间)

c# - 在复选框列表中为选中的特定项目添加文本框 WPF

wpf - 组合框项目模板和前景