Как добавить триггер к пользовательскому элементу управления WPF, не переопределяя существующий стиль?

Острота:

new_list = reduce(lambda x,y: x+[y][:1-int(y in x)], my_list, [])
18
задан Dave Clemmer 15 August 2011 в 19:05
поделиться

1 ответ

Просто чтобы прояснить терминологию: Пользовательский элемент управления - это элемент управления, производный от класса UserControl. Если я вас правильно понял, вы унаследовали от ToggleButton свойства UncheckedContent и CheckedContent. В этом случае вы создали настраиваемый элемент управления . Всегда легче следовать, если мы договоримся об общей терминологии :)

Насколько я знаю, в XAML нельзя выполнять такое наследование общих стилей. Вы всегда должны явно указывать, на каком стиле основан другой стиль. Ваш стиль может быть основан на стиле по умолчанию для ToggleButton или на определенном другом стиле. Если вы не можете построить цепочку наследования стилей, которая уважает это, этот подход не сработает.

Но поскольку у вас есть настраиваемый элемент управления, нельзя Если вы пишете для него стиль по умолчанию, основанный на стиле переключателя по умолчанию, как этот?

<Style TargetType="{x:Type CustomToggleButton}" 
       BasedOn="{StaticResource {x:Type ToggleButton}}">

Затем всякий раз, когда вы применяете явный стиль к переключателю, вы должны указать, что он основан на стиле переключателя по умолчанию.

] Также вы можете написать шаблон управления (по умолчанию) для вашей новой кнопки переключения в Themes \ Generic.xaml, который содержит указанные выше триггеры. В blend вы можете получить копию шаблона по умолчанию для кнопки переключения («Редактировать шаблон» -> «Редактировать копию»), чтобы вы могли убедиться, что ваша кнопка переключения выглядит точно так же, как обычная кнопка переключения. Затем включите триггеры, указанные выше, в этот шаблон.

Кстати: вам не нужно создавать новый элемент управления только для добавления новых свойств. Вы можете добавить новые свойства к существующему элементу управления, используя прикрепленные свойства . Их можно использовать из XAML, как обычные свойства.

22
ответ дан 30 November 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: