Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

Переопределение настроек стиля

В то время как оба элемента управления подчиняются стилю, после применения стиля к элементу управления вполне допустимо изменять некоторые из определенных настроек. Например, элемент

Button
теперь использует курсор
Help
(вместо курсора
Hand
, определенного в стиле):

<Button x:Name="btnTestButton" Content="Yes, but we are reusing settings!"

Cursor="Help" Style="{StaticResource BasicControlStyle}" Width="250" />

Стили

обрабатываются перед настройками индивидуальных свойств элемента управления, к которому применен стиль; следовательно, элементы управления могут "переопределять" настройки от случая к случаю.

Влияние атрибута TargetType на стили

В настоящий момент наш стиль определен так, что его может задействовать любой элемент управления (и он должен делать это явно, устанавливая свое свойство

Style
), поскольку каждое свойство уточнено посредством класса
Control
. Для программы, определяющей десятки настроек, в результате получился бы значительный объем повторяющегося кода. Один из способов несколько улучшить ситуацию предусматривает использование атрибута
TargetType
. Добавление атрибута
TargetType
к открывающему дескриптору
Style
позволяет точно указать, где стиль может быть применен (в данном примере внутри файла
Арр.xaml
):

<Style x:Key="BasicControlStyle" TargetType="Control">

<Setter Property="FontSize" Value="14"/>

<Setter Property="Height" Value="40"/>

<Setter Property="Cursor" Value="Hand"/>

</Style>

На заметку! При построении стиля, использующего базовый класс, нет нужды беспокоиться о том, что значение присваивается свойству зависимости, которое не поддерживается производными типами. Если производный тип не поддерживает заданное свойство зависимости, то оно игнорируется.

Кое в чем прием помог, но все равно вы имеете стиль, который может применяться к любому элементу управления. Атрибут

TargetType
более удобен, когда необходимо определить стиль, который может быть применен только к отдельному типу элементов управления. Добавьте в словарь ресурсов приложения следующий стиль:

<Style x:Key="BigGreenButton" TargetType="Button">

<Setter Property="FontSize" Value="20"/>

<Setter Property="Height" Value="100"/>

<Setter Property="Width" Value="100"/>

<Setter Property="Background" Value="DarkGreen"/>

<Setter Property="Foreground" Value="Yellow"/>

</Style>

Такой стиль будет работать только с элементами управления

Button
(или подклассами
Button
). Если применить его к несовместимому элементу, тогда возникнут ошибки разметки и компиляции. Добавьте элемент управления Button, который использует новый стиль:

<Button x:Name="btnAnotherButton" Content="OK!" Margin="0,10,0,0"

Style="{StaticResource BigGreenButton}" Width="250" Cursor="Help"/>

Результирующий

вывод представлен на рис. 27.7.

Еще один эффект от атрибута

TargetType
заключается в том, что стиль будет применен ко всем элементам данного типа внутри области определения стиля при условии, что свойство
х:Key
отсутствует.

Вот еще один стиль уровня приложения, который будет автоматически применяться ко всем элементам управления

TextBox
в текущем приложении:

<!-- Стандартный стиль для всех текстовых полей -->

<Style TargetType="TextBox">

<Setter Property="FontSize" Value="14"/>

<Setter Property="Width" Value="100"/>

<Setter Property="Height" Value="30"/>

<Setter Property="BorderThickness" Value="5"/>

<Setter Property="BorderBrush" Value="Red"/>

<Setter Property="FontStyle" Value="Italic"/>

</Style>

Теперь можно определять любое количество элементов управления

TextBox
, и все они автоматически получат установленный внешний вид. Если какому-то элементу управления
TextBox
не нужен такой стандартный внешний вид, тогда он может отказаться от него, установив свойство
StyleB {x:Null}
. Например, элемент
txtTest
будет иметь неименованный стандартный стиль, а элемент
txtTest2
сделает все самостоятельно:

<TextBox x:Name="txtTest"/>

<TextBox x:Name="txtTest2" Style="{x:Null}" BorderBrush="Black"

BorderThickness="5" Height="60" Width="100" Text="Ha!"/>

Создание подклассов существующих стилей

Новые стили можно также строить на основе существующего стиля посредством свойства

BasedOn
. Расширяемый стиль должен иметь подходящий атрибут
х:Кеу
в словаре, т.к. производный стиль будет ссылаться на него по имени, используя расширение разметки
{StaticResource}
или
{DynamicResource}
. Ниже представлен новый стиль, основанный на стиле
BigGreenButton
, который поворачивает элемент управления
Button
на 20 градусов:

<!-- Этот стиль основан на BigGreenButton -->

<Style x:Key="TiltButton" TargetType="Button"

BasedOn="{StaticResource BigGreenButton}">

<Setter Property="Foreground" Value="White"/>

<Setter Property="RenderTransform">

<Setter.Value>

<RotateTransform Angle="20"/>

</Setter.Value>

Поделиться:
Популярные книги

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Вадбольский

Никитин Юрий Александрович
1. Вадбольский
Фантастика:
попаданцы
5.00
рейтинг книги
Вадбольский

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Потусторонний. Книга 1

Погуляй Юрий Александрович
1. Господин Артемьев
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Потусторонний. Книга 1