В то время как оба элемента управления подчиняются стилю, после применения стиля к элементу управления вполне допустимо изменять некоторые из определенных настроек. Например, элемент
Button
теперь использует курсор
Help
(вместо курсора
Hand
, определенного в стиле):
<Button x:Name="btnTestButton" Content="Yes, but we are reusing settings!"
обрабатываются перед настройками индивидуальных свойств элемента управления, к которому применен стиль; следовательно, элементы управления могут "переопределять" настройки от случая к случаю.
Влияние атрибута TargetType на стили
В настоящий момент наш стиль определен так, что его может задействовать любой элемент управления (и он должен делать это явно, устанавливая свое свойство
Style
), поскольку каждое свойство уточнено посредством класса
Control
. Для программы, определяющей десятки настроек, в результате получился бы значительный объем повторяющегося кода. Один из способов несколько улучшить ситуацию предусматривает использование атрибута
TargetType
. Добавление атрибута
TargetType
к открывающему дескриптору
Style
позволяет точно указать, где стиль может быть применен (в данном примере внутри файла
На заметку! При построении стиля, использующего базовый класс, нет нужды беспокоиться о том, что значение присваивается свойству зависимости, которое не поддерживается производными типами. Если производный тип не поддерживает заданное свойство зависимости, то оно игнорируется.
Кое в чем прием помог, но все равно вы имеете стиль, который может применяться к любому элементу управления. Атрибут
TargetType
более удобен, когда необходимо определить стиль, который может быть применен только к отдельному типу элементов управления. Добавьте в словарь ресурсов приложения следующий стиль:
Такой стиль будет работать только с элементами управления
Button
(или подклассами
Button
). Если применить его к несовместимому элементу, тогда возникнут ошибки разметки и компиляции. Добавьте элемент управления Button, который использует новый стиль: