WPF样式

样式

由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>

你可能感兴趣的:(button,WPF,setter)