我正在使用HierarchicalDataTemplate为TreeView创建一些自定义模板。然而,我在使用从根类继承的大量类时遇到了问题。看起来X:Type是非常特定的,不会在从给定类继承的类上触发。以下是一些进一步的信息来帮助描述它
- 我有一个名为
Event
的根类,它有50多个其他类继承并扩展它 - 当我使用下面的
DataType="{x:Type events:Event}
时,只有当对象只是基类时,它才会起作用
我不希望在我的XAML文件中有50+层次结构数据模板,那么有什么方法可以让它工作吗?
这实际上不是{x:Type }
故障,它只是从资源中解决DataTemplate
的方法。考虑使用自定义DataTemplateSelector
。快速示例:
class ItemTemplateSelector : DataTemplateSelector
{
public DataTemplate EventTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if(item is Event)
{
return EventTemplate;
}
// TODO: templates for other types
return null;
}
}
数据模板定义:
<FrameworkElement.Resources>
<local:ItemTemplateSelector x:Key="ItemTemplateSelector">
<local:ItemTemplateSelector.EventTemplate>
<!-- template for event -->
<HierarchicalDataTemplate>
<TextBlock Text="Event" />
</HierarchicalDataTemplate>
</local:ItemTemplateSelector.EventTemplate>
</local:ItemTemplateSelector>
</FrameworkElement.Resources>
用法:
<TreeView ItemTemplateSelector="{StaticResource ItemTemplateSelector}">
</TreeView>