что делает x: Key = "{x: Type TextBox}"? - PullRequest
14 голосов
/ 01 февраля 2011

все в названии:

Я уже не раз читал, что установка такого стиля:

<Style TargetType="TextBox">...</Style>

примерно эквивалентна:

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

(в последний раз в комментарии к другому вопросу )

оба должны применять стиль ко всем текстовым полям в приложении (если они, конечно, добавлены в ресурсы приложения)

но я попробовал оба в своих приложениях, и работает только второе с определенным x: Key.

это выглядит довольно логично для меня, так как первое не знает, где его применять без каких-либоx: свойство ключа установлено, но какой смысл в первом синтаксисе?

Редактировать: пример кода в моем приложении, который отлично работает:

<Style x:Key="{x:Type ComboBoxItem}" TargetType="{x:Type ComboBoxItem}">
     <Setter Property="HorizontalContentAlignment" Value="Left"/>
     <Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>

и код, который не:

<Style TargetType="{x:Type ComboBoxItem}">
     <Setter Property="HorizontalContentAlignment" Value="Left"/>
     <Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>

Я написал это, чтобы избавиться от проблем связывания, которые вы получаете с comboBoxItems при манипулировании существующим ComboBox itemsSource.И первый код работает нормально, а второй - нет.

Вы можете легко это увидеть, установив горизонтальныйКонтентАльмент вправо

Редактировать 2: Этот код простоположить в словарь ресурсов в моем App.xaml.И замена TargetType = "{x: Type ComboBoxItem}" на TargetType = "ComboBoxItem" не имеет никакого значения

Редактировать 3: Я только что понял, что, возможно, забыл уточнить что-то важное (извинитеоб этом): хотя стили определены в xaml, я фактически добавляю элементы управления к макету в моем коде, так как они добавляются динамически.Может быть, там, где беда ...

Ответы [ 3 ]

9 голосов
/ 01 февраля 2011

Как показано в первом примере выше, установка свойства TargetType для TextBlock без назначения стиля с помощью клавиши x: Key позволяет применять ваш стиль ко всем элементам TextBlock.На самом деле происходит то, что при этом неявно устанавливается значение x: Key равным {x: Type TextBlock}.Это также означает, что если вы зададите для стиля значение x: Key, отличное от {x: Type TextBlock}, стиль не будет применен ко всем элементам TextBlock автоматически.Вместо этого вам нужно явно применить стиль к элементам TextBlock.

Учитывая, что это из официальной документации , ваша проблема должна быть аномальной.Я видел несколько таких странностей, и они не слишком неожиданны, так как кодировка за WPF неизбежно будет несовершенной.опущено?)

4 голосов
/ 01 февраля 2011

Теперь вы можете каскадно добавлять свои стили, добавив:

BasedOn="{StaticResource {x:Type ComboBox}}"

в

2 голосов
/ 01 февраля 2011

Каждому ресурсу нужен ключ, но если для стиля опущено Key, то по умолчанию должен использоваться тип TargetType. Так что оба ваших фрагмента выше должны быть эквивалентны.

Можете ли вы опубликовать весь код там, где он не работает, без явного определения Key?

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