Стили WPF: разница между x: имя и x: тип - PullRequest
6 голосов
/ 29 января 2010

При определении стиля в словаре ресурсов вы можете использовать либо

x:Name="xyz"

и

x:Type="xyz". 

и может ссылаться на этот стиль в XAML, например {StaticResource xyz}.

В большинстве примеров используется «x: Key», а разница между «name» и «key» заключается в том, что использование «x: name» позволяет использовать этот код определения кода стиля?

ИСПРАВЛЕНИЯ: Вопрос совершенно неверный. То, что должно было быть задано, было разницей между x: Key и x: Name. Но я не пытался сам попробовать этот код, а просто полагался на воспоминания - думал, что у меня есть оба в ResourceDictionary, что было неправильно. И у меня тоже не было такого кода в

 <xxx.Resources > 

разделов, так как он тоже не работает. Вы не можете ссылаться на Стиль, у которого нет x: Key (x: Name здесь не работает), и добавление двух стилей без исключения x: Key вызывает исключение, так как оба получают одинаковый (пустой?) Ключ в словаре.

Рэй очень хорошо объясняет разницу, спасибо.
Моя вина

Ответы [ 2 ]

9 голосов
/ 29 января 2010

Это вопрос с подвохом. Фактически, вы не можете определить стиль в ResourceDictionary, используя либо

x:Type="xyz"

или

x:Name="xyz"

Вот разница:

  • x:Type="xyz" недопустимый синтаксис XAML.
  • x:Name="xyz" на самом деле является допустимым синтаксисом XAML, который называет объект (который влияет на генерацию выделенного кода), но не предоставляет ключ словаря.
  • x:Key="xyz" также является допустимым синтаксисом XAML, который предоставляет ключ словаря, но не называет объект.

В словаре требуется ключ, поэтому вы должны указать x:Key (за исключением того, что для FrameworkTemplate и его подклассов ключ может быть выведен из TargetType или DataType). В словаре вы также можете указать x:Name при желании, но это не влияет на клавишу.

Обратите внимание, что x:Type является расширением разметки, которое предопределено XAML, тогда как x:Name и x:Key являются фактическими ключевыми словами XAML. Поэтому x:Type может использоваться только в синтаксисе расширения разметки в качестве значения свойства:

something="{x:Type whatever}"

, тогда как x:Name и x:Key являются атрибутами, которые можно использовать для элементов.

2 голосов
/ 29 января 2010

x: Имя позволяет вам создать ссылку, которую вы можете использовать по имени.

x: type позволяет вам создать ссылку, которая используется этим типом

например

<Style TargetType="{x:Type Button}">
    ...
</Style>

создает стиль, который автоматически влияет на кнопки

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