我已经多次看到这种形式的 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>
这会导致资源字典中出现三个条目。下图中的橙色箭头指向 DataTemplateKeyButton 类型的基于 TextBlock 的条目,而红色箭头指向 SpecialButton 键控资源的特定(键控)条目:

关于WPF - 在没有键的情况下在 ResourceDictionary 中定义 DataTemplate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5135536/

10-10 18:18