如何通过代码找到 DataTemplate?
How can I find a DataTemplate via code?
知道 HierarchicalDataTemplate
是在资源树的某处定义的(即它可以在应用程序级别、style
、window 的资源或某处定义在 window 的控件层次结构中),如何以编程方式确定哪个 HierarchicalDataTemplate
将应用于与特定控件相关的特定数据类型?
例如,在下面的例子中,假设我们有一个 Foo 类型的对象,我们如何才能得到它的 HierarchicalDataTemplate
——恰好定义在 window 级别这里--相对于 MainTreeView?
<Window ... >
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type Foo}"
ItemsSource="{Binding Children}">
<TextBlock Text={Binding Name}" />
</HierarchicalDataTemplate>
</Window.Resources>
<TreeView x:Name="MainTreeView" />
</Window>
我尝试了以下方法,但它 returns 无效:
var hdt = (HierarchicalDataTemplate)MainTreeView.FindResource(typeof(Foo));
找到了。 DataTemplate
对象不像 Style
对象那样使用 DataType 作为它们的默认键。相反,他们使用一个 DataTemplateKey
对象,你得到如下...
var dataTemplateKey = new DataTemplateKey(dataItem.GetType());
var hdt = (HierarchicalDataTemplate)MainTreeView.TryFindResource(dataTemplateKey);
成功了! :)
知道 HierarchicalDataTemplate
是在资源树的某处定义的(即它可以在应用程序级别、style
、window 的资源或某处定义在 window 的控件层次结构中),如何以编程方式确定哪个 HierarchicalDataTemplate
将应用于与特定控件相关的特定数据类型?
例如,在下面的例子中,假设我们有一个 Foo 类型的对象,我们如何才能得到它的 HierarchicalDataTemplate
——恰好定义在 window 级别这里--相对于 MainTreeView?
<Window ... >
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type Foo}"
ItemsSource="{Binding Children}">
<TextBlock Text={Binding Name}" />
</HierarchicalDataTemplate>
</Window.Resources>
<TreeView x:Name="MainTreeView" />
</Window>
我尝试了以下方法,但它 returns 无效:
var hdt = (HierarchicalDataTemplate)MainTreeView.FindResource(typeof(Foo));
找到了。 DataTemplate
对象不像 Style
对象那样使用 DataType 作为它们的默认键。相反,他们使用一个 DataTemplateKey
对象,你得到如下...
var dataTemplateKey = new DataTemplateKey(dataItem.GetType());
var hdt = (HierarchicalDataTemplate)MainTreeView.TryFindResource(dataTemplateKey);
成功了! :)