我已经多次看到这种形式的 wpf 代码示例:
<Window.Resources>
<DataTemplate DataType="{x:Type SomeType}">
<!-- Elements defining the DataTemplate-->
</DataTemplate>
</Window.Resources>
我理解用法,但我不明白为什么这种语法是可以的:由于 ResourceDictionary 实现了 IDictionary,因此我们添加到 Resource 属性的每个元素都必须指定一个键。现在我知道使用 DictionaryKeyPropertyAttribute,一个类可以提供一个隐式键值 - 但在 DataTemplate 类的情况下,提供的属性是“DataTemplateKey”。我知道这听起来有点琐碎,但这个问题的动机是知道如何使用其他类,即使我之前没有看到使用示例的特权(可能是某些 3rd 方......)。任何人?
最佳答案
正如您在问题中提到的,没有 x:Key
属性的条目使用 DataTemplateKey(SomeType) 作为键。您只能为资源中的特定 SomeType
指定一个这样的实例。 DataTemplateKey 派生自 TemplateKey ,而 ResourceKey 本身又派生自 ojit_a 。当然,这样的 DataTemplate 资源定义可以出现在许多类型中,并保持唯一,因为每个相应类型的 DataTemplateKey 将是唯一的。
例如,考虑以下资源定义:
<Window.Resources>
<!-- Generic Button data template -->
<DataTemplate DataType="{x:Type Button}">
<!-- Elements defining the DataTemplate-->
</DataTemplate>
<!-- Generic TextBlock data template -->
<DataTemplate DataType="{x:Type TextBlock}">
<!-- Elements defining the DataTemplate-->
</DataTemplate>
<!-- Specific Button data template -->
<DataTemplate x:Key="SpecialButton" DataType="{x:Type Button}">
<!-- Elements defining the DataTemplate-->
</DataTemplate>
</Window.Resources>
这会导致资源字典中出现三个条目。下图中的橙色箭头指向 DataTemplateKey
和 Button
类型的基于 TextBlock
的条目,而红色箭头指向 SpecialButton
键控资源的特定(键控)条目:关于WPF - 在没有键的情况下在 ResourceDictionary 中定义 DataTemplate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5135536/