【问题标题】:WPF DataTemplate - x:Key vs DataType="{x:Type XXXX")WPF DataTemplate - x:Key vs DataType="{x:Type XXXX")
【发布时间】:2009-12-23 15:58:44
【问题描述】:

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

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

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

(关于为什么我需要获取 Resource 找到的 DataTemplate 的查询,请参阅question

【问题讨论】:

    标签: wpf xaml datatemplate


    【解决方案1】:

    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>
    

    代码隐藏:

    //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
            }
        }
    }
    

    【讨论】:

    • 这看起来不错,但它是一个 C# 解决方案。有没有办法直接从 XAML 做到这一点?例如,我有一个随处使用的 DataType 模板,但我也想将它用作 TemplateSelector 中的值。同样的事情......如果我添加一个键,我会丢失数据类型匹配。如果我不这样做,我不确定如何在 XAML 中引用它。
    • @MarqueIV:您应该可以在 XAML 中使用 {x:Type ...} 作为键来引用它。
    • 试过这个... DataTemplate="{StaticResource {x:Type vm:IOPBase}}" 但它不起作用。崩溃。 (仅供参考,我知道类型是正确的,因为模板有 'DataType="{x:Type vm:IOPBase}"' 可以正常工作。)想法?
    • @MarqueIV:好问题,我认为它会起作用。您能否创建一个新问题并发布一个最小的工作示例?
    • 我感觉它行不通,因为即使在您自己的示例中,类型也不是关键......使用数据类型初始化的 DataTemplateKey 是。是的...我会添加一个新的...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多