样式
由System.Windows.Style类表示。
<StackPanel>
<StackPanel.Resources>
<Style x:Key="ButtonStyle">
<Setter Property="Button.FontSize" Value="22"/>
<Setter Property="Button.Background" Value="Purple"/>
<Setter Property="Button.RenderTransformOrigin" Value=".5,.5"/>
</Style>
<!-- 继承ButtonStyle -->
<Style x:Key="ButtonStyle2" BasedOn="{StaticResource ButtonStyle}">
<Setter Property="Button.FontWeight" Value="Bold"/>
</Style>
</StackPanel.Resources>
<Button Style="{StaticResource ButtonStyle}">1</Button>
<Button Style="{StaticResource ButtonStyle2}">2</Button>
</StackPanel>
共享Style
<StackPanel>
<StackPanel.Resources>
<Style x:Key="ButtonStyle">
<Setter Property="Control.FontSize" Value="22"/>
<Setter Property="Control.Background" Value="Purple"/>
<Setter Property="Control.RenderTransformOrigin" Value=".5,.5"/>
<!-- 只对存在的属性进行设置,不存在则忽略 -->
<Setter Property="Button.ClickMode" Value="Press"/>
</Style>
<!-- 继承ButtonStyle -->
<Style x:Key="ButtonStyle2" BasedOn="{StaticResource ButtonStyle}">
<Setter Property="Control.FontWeight" Value="Bold"/>
</Style>
</StackPanel.Resources>
<Button Style="{StaticResource ButtonStyle}">1</Button>
<Button Style="{StaticResource ButtonStyle2}">2</Button>
<TextBox Style="{StaticResource ButtonStyle2}" >TextBox</TextBox>
限制Style使用
让Style应用到一个特定类型上,设置TargetType属性。
<StackPanel.Resources>
<Style x:Key="LblStyle" TargetType="{x:Type Label}">
<Setter Property="Background" Value="Olive"/>
</Style>
</StackPanel.Resources>
<!-- 用到非Label对象上将报错 -->
<Label Style="{StaticResource LblStyle}">Label</Label>
创建隐式Style
设置Style的TargetType还有另一功能,忽略key属性,该Style隐式应用到所有目标类型元素。
其实有一隐式设置的键名,即为TargetType,因此同一TargetType只可有一个隐式Style,否则报错。
<StackPanel.Resources>
<!-- 不显示添加key -->
<Style TargetType="{x:Type Label}">
<Setter Property="Background" Value="Olive"/>
</Style>
</StackPanel.Resources>
<Label>Label</Label>