C#WPF x:类型标记,包括继承类的类



我正在使用HierarchicalDataTemplate为TreeView创建一些自定义模板。然而,我在使用从根类继承的大量类时遇到了问题。看起来X:Type是非常特定的,不会在从给定类继承的类上触发。以下是一些进一步的信息来帮助描述它

  1. 我有一个名为Event的根类,它有50多个其他类继承并扩展它
  2. 当我使用下面的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>

最新更新