C#WPF x:键入包含继承类的类的标记

时间:2015-02-24 21:08:11

标签: c# .net wpf

我正在使用HierarchicalDataTemplate为TreeView工作一些自定义模板。但是,我遇到的问题是它可以使用从根类继承的各种类。看起来X:Type非常具体,并且不会触发从给定类继承的类。以下是一些有助于描述它的更多信息。

  1. 我有一个名为Event的根类,它有50多个继承它并扩展它的类。
  2. 当我使用以下DataType="{x:Type events:Event}时,它仅在对象只是基类时才有效。
  3. 我不希望在我的XAML文件中有50多个HierarchicalDataTemplates,那么是否有任何方法可以使它工作?

1 个答案:

答案 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>