Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
•
Triggers
•
BasedOn
•
TargetType
Определение и применение стиля
Почти в каждом случае объект
Style
Style
Style
Setters
Давайте построим стиль, который фиксирует базовые характеристики шрифта элемента управления в нашем приложении. Начните с создания в Visual Studio нового проекта приложения WPF по имени
WpfStyles
App.xaml
<Application.Resources>
<Style x:Key="BasicControlStyle">
<Setter Property="Control.FontSize" Value="14"/>
<Setter Property="Control.Height" Value="40"/>
<Setter Property="Control.Cursor" Value="Hand"/>
</Style>
</Application.Resources>
Обратите внимание, что объект
BasicControlStyle
Setter
{StackResource}
{DynamicResource}
Style
Grid
<StackPanel>
<Label x:Name="lblInfo" Content="This style is boring..."
Style="{StaticResource BasicControlStyle}" Width="150"/>
<Button x:Name="btnTestButton" Content="Yes, but we are reusing settings!"
Style="{StaticResource BasicControlStyle}" Width="250"/>
</StackPanel>
Если вы просмотрите элемент
Window
Переопределение настроек стиля
В то время как оба элемента управления подчиняются стилю, после применения стиля к элементу управления вполне допустимо изменять некоторые из определенных настроек. Например, элемент
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"/>