【问题标题】:How can I find a DataTemplate via code?如何通过代码找到 DataTemplate?
【发布时间】:2015-09-25 03:43:00
【问题描述】:

知道HierarchicalDataTemplate 是在资源树中的某处定义的(即,它可以在应用程序级别、style、窗口的资源中或该窗口的控件层次结构中的某处定义),以编程方式,如何确定哪个HierarchicalDataTemplate 将应用于与特定控件相关的特定数据类型?

例如,在下面的示例中,假设我们有一个 Foo 类型的对象,我们如何获得它的 HierarchicalDataTemplate——它恰好在此处定义在窗口级别——相对于 MainTreeView?

<Window ... >

    <Window.Resources>

        <HierarchicalDataTemplate DataType="{x:Type Foo}"
            ItemsSource="{Binding Children}">
            <TextBlock Text={Binding Name}" />
        </HierarchicalDataTemplate> 

    </Window.Resources>

    <TreeView x:Name="MainTreeView" />

</Window>

我尝试了以下方法,但它返回 null:

var hdt = (HierarchicalDataTemplate)MainTreeView.FindResource(typeof(Foo));

【问题讨论】:

    标签: wpf resources datatemplate hierarchicaldatatemplate


    【解决方案1】:

    找到了。 DataTemplate 对象不像 Style 对象那样使用 DataType 作为默认键。相反,他们使用DataTemplateKey 对象,您可以按如下方式获得...

    var dataTemplateKey = new DataTemplateKey(dataItem.GetType());
    var hdt = (HierarchicalDataTemplate)MainTreeView.TryFindResource(dataTemplateKey);
    

    成功了! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-04
      • 2021-03-09
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2014-04-28
      • 2016-10-02
      相关资源
      最近更新 更多