WPF - Определение DataTemplate внутри ResourceDictionary без ключа - PullRequest
4 голосов
/ 27 февраля 2011

Я много раз видел примеры кода wpf в этой форме:

<Window.Resources>
    <DataTemplate DataType="{x:Type SomeType}">
        <!-- Elements defining the DataTemplate-->
    </DataTemplate>
</Window.Resources>

Я понимаю использование, но я не могу понять, почему этот синтаксис в порядке: поскольку ResourceDictionary реализует IDictionary, поэтому каждый элемент, который мыСвойство add to Resource должно указывать ключ.Теперь я знаю, что с помощью DictionaryKeyPropertyAttribute класс может предоставить неявное значение ключа - но в случае класса DataTemplate предоставленное свойство равно «DataTemplateKey».Я знаю, это звучит немного мелочно, но мотивация для этого вопроса состоит в том, чтобы знать, как использовать другие классы, даже если у меня не было привилегии просматривать примеры использования ранее (возможно, какой-то третьей стороной ...).кто-нибудь? * * 1004

1 Ответ

3 голосов
/ 27 февраля 2011

Как вы упомянули в своем вопросе, записи без атрибута x:Key используют DataTemplateKey (SomeType) в качестве ключа.Вы можете указать только один такой экземпляр для конкретного SomeType в ресурсах.DataTemplateKey является производным от TemplateKey , который сам по себе является производным от ResourceKey .Конечно, такие определения ресурсов 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:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...