WPF DataTemplate - x:Key vs DataType ="{x:Type XXXX")

Vac*_*ano 11 wpf xaml datatemplate

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

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

因此,一旦我为我的模板设置了DataType,我如何找到Key值?是否有一些公式将DataTemplate转换为Key的字符串?

(关于我为什么需要获取Resource找到的DataTemplate的问题,请看这个问题.

Hei*_*nzi 19

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

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

XAML:

<Window ...>
    <Window.Resources>
        <DataTemplate DataType="{x:Type TextBlock}">
        </DataTemplate>
    </Window.Resources>

    <Button Click="Button_Click">Test</Button>
</Window>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

//using ...

namespace WpfCsApplication1 {
    public partial class Window1 : Window {
        public Window1() {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e) {
            var key = new System.Windows.DataTemplateKey(typeof(TextBlock));
            var r = (DataTemplate)this.FindResource(key);

            MessageBox.Show(r.ToString()); // to show that it worked
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @MarqueIV:您应该能够使用`{x:Type ...}`作为键在XAML中引用它. (2认同)