我正在使用HierarchicalDataTemplate为TreeView工作一些自定义模板。但是,我遇到的问题是它可以使用从根类继承的各种类。看起来X:Type非常具体,并且不会触发从给定类继承的类。以下是一些有助于描述它的更多信息。
Event
的根类,它有50多个继承它并扩展它的类。DataType="{x:Type events:Event}
时,它仅在对象只是基类时才有效。我不希望在我的XAML文件中有50多个HierarchicalDataTemplates,那么是否有任何方法可以使它工作?
答案 0 :(得分:3)
它不是{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>