Обратите внимание, что объект BasicControlStyle
Setter. Теперь примените получившийся стиль к нескольким элементам управления в главном окне. Из-за того, что стиль является объектным ресурсом, элементы управления, которым он необходим, по-прежнему должны использовать расширение разметки {StackResource} или {DynamicResource} для нахождения стиля. Когда они находят стиль, то устанавливают элемент ресурса в идентично именованное свойство Style. Замените стандартный элемент управления Grid следующей разметкой:
Style="{StaticResource BasicControlStyle}" Width="150"/>
Style="{StaticResource BasicControlStyle}" Width="250"/>
Если вы просмотрите элемент Window
Переопределение настроек стиля
В то время как оба элемента управления подчиняются стилю, после применения стиля к элементу управления вполне допустимо изменять некоторые из определенных настроек. Например, элемент Button
Help (вместо курсора Hand, определенного в стиле): Cursor="Help" Style="{StaticResource BasicControlStyle}" Width="250" />
Стили обрабатываются перед настройками индивидуальных свойств элемента управления, к которому применен стиль; следовательно, элементы управления могут "переопределять" настройки от случая к случаю.
Влияние атрибута TargetType на стили
В настоящий момент наш стиль определен так, что его может задействовать любой элемент управления (и он должен делать это явно, устанавливая свое свойство Style
Control. Для программы, определяющей десятки настроек, в результате получился бы значительный объем повторяющегося кода. Один из способов несколько улучшить ситуацию предусматривает использование атрибута TargetType. Добавление атрибута TargetType к открывающему дескриптору Style позволяет точно указать, где стиль может быть применен (в данном примере внутри файла Арр.xaml):
На заметку!
При построении стиля, использующего базовый класс, нет нужды беспокоиться о том, что значение присваивается свойству зависимости, которое не поддерживается производными типами. Если производный тип не поддерживает заданное свойство зависимости, то оно игнорируется.Кое в чем прием помог, но все равно вы имеете стиль, который может применяться к любому элементу управления. Атрибут TargetType
Такой стиль будет работать только с элементами управления Button
Button). Если применить его к несовместимому элементу, тогда возникнут ошибки разметки и компиляции. Добавьте элемент управления Button, который использует новый стиль: Style="{StaticResource BigGreenButton}" Width="250" Cursor="Help"/>
Результирующий вывод представлен на рис. 27.7.
Еще один эффект от атрибута TargetType
х:Key Вот еще один стиль уровня приложения, который будет автоматически применяться ко всем элементам управления TextBox
Теперь можно определять любое количество элементов управления TextBox
TextBox не нужен такой стандартный внешний вид, тогда он может отказаться от него, установив свойство StyleB {x:Null}. Например, элемент txtTest будет иметь неименованный стандартный стиль, а элемент txtTest2 сделает все самостоятельно: BorderThickness="5" Height="60" Width="100" Text="Ha!"/>
Создание подклассов существующих стилей
Новые стили можно также строить на основе существующего стиля посредством свойства BasedOn
х:Кеу в словаре, т.к. производный стиль будет ссылаться на него по имени, используя расширение разметки {StaticResource} или {DynamicResource}. Ниже представлен новый стиль, основанный на стиле BigGreenButton, который поворачивает элемент управления Button на 20 градусов: BasedOn="{StaticResource BigGreenButton}">
Чтобы применить новый стиль, модифицируйте разметку для кнопки следующим образом:
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT