WPF数据模板-x:Key vs DataType=";{x:XXXX类型";)

WPF数据模板-x:Key vs DataType=";{x:XXXX类型";),wpf,xaml,datatemplate,Wpf,Xaml,Datatemplate,我有一个要使用FrameworkElement.FindResource()查找的数据模板。为此,我需要在数据模板上有一个键 问题是x:key和分配数据类型是互斥的。() 那么,一旦我为我的模板设置了数据类型,我如何找到键值呢?是否有一些公式可以将数据模板转换为键值的字符串 (有关我为什么需要获取资源找到的DataTemplate的问题,请参见此。x:Key似乎是System.Windows.DataTemplateKey类型的对象。因此,您可以使用新建DataTemplateKey(typeo

我有一个要使用
FrameworkElement.FindResource()
查找的数据模板。为此,我需要在数据模板上有一个键

问题是x:key和分配数据类型是互斥的。()

那么,一旦我为我的模板设置了数据类型,我如何找到键值呢?是否有一些公式可以将数据模板转换为键值的字符串


(有关我为什么需要获取资源找到的DataTemplate的问题,请参见此。

x:Key似乎是
System.Windows.DataTemplateKey
类型的对象。因此,您可以使用
新建DataTemplateKey(typeof(myType))为资源“创建”密钥。)
FindResource
将使用此键,因为
TemplateKey.Equals
已被覆盖

下面是一个非常简单的示例应用程序:

XAML:


这看起来很棒,但却是一个C#解决方案。有没有办法直接从XAML中执行此操作?例如,我有一个数据类型模板,我在任何地方都在使用它,但我也想在TemplateSelector中将其用作值。同样的事……如果我添加一个键,我会丢失数据类型匹配。如果我没有,我不确定如何在XAML中引用它。@MarqueIV:You应该能够通过使用
{x:Type…}
作为键在XAML中引用它。尝试了此…DataTemplate=“{StaticResource{x:Type vm:IOPBase}”,但它不起作用。崩溃。(仅供参考,我知道该类型是正确的,因为该模板具有“DataType=“{x:Type vm:IOPBase}”,工作正常。)想法?@MarqueIV:好问题,我认为它会起作用。你能创建一个新问题并发布一个最小的工作示例吗?我感觉它不会起作用,因为即使根据你自己的示例,类型也不是键…用数据类型初始化的DataTemplateKey是。是的…我会添加一个新的。。。
<Window ...>
    <Window.Resources>
        <DataTemplate DataType="{x:Type TextBlock}">
        </DataTemplate>
    </Window.Resources>

    <Button Click="Button_Click">Test</Button>
</Window>