Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
•
Triggers•
BasedOn•
TargetTypeОпределение и применение стиля
Почти в каждом случае объект
StyleStyleStyleSettersДавайте построим стиль, который фиксирует базовые характеристики шрифта элемента управления в нашем приложении. Начните с создания в Visual Studio нового проекта приложения WPF по имени
WpfStylesApp.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>Обратите внимание, что объект
BasicControlStyleSetter{StackResource}{DynamicResource}StyleGrid<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Переопределение настроек стиля
В то время как оба элемента управления подчиняются стилю, после применения стиля к элементу управления вполне допустимо изменять некоторые из определенных настроек. Например, элемент
ButtonHelpHand<Button x:Name="btnTestButton" Content="Yes, but we are reusing settings!" Cursor="Help" Style="{StaticResource BasicControlStyle}" Width="250" />Стили обрабатываются перед настройками индивидуальных свойств элемента управления, к которому применен стиль; следовательно, элементы управления могут "переопределять" настройки от случая к случаю.
Влияние атрибута TargetType на стили
В настоящий момент наш стиль определен так, что его может задействовать любой элемент управления (и он должен делать это явно, устанавливая свое свойство
StyleControlTargetTypeTargetTypeStyleАрр.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"/>