gpt4 book ai didi

C# WPF x :Type Markup that includes classes that inherit a class

转载 作者:行者123 更新时间:2023-11-30 22:00:15 26 4
gpt4 key购买 nike

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

  1. 我有一个名为 Event 的根类,有 50 多个其他类继承并扩展了它。
  2. 当我使用以下 DataType="{x:Type events:Event} 时,它仅在对象只是基类时才有效。

我不希望我的 XAML 文件中有 50 多个 HierarchicalDataTemplates,那么有什么方法可以让它工作吗?

最佳答案

这并不是真正的 {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>

关于C# WPF x :Type Markup that includes classes that inherit a class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28706282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com