WPF Style 基础样式-1

201

在 WPF 中,Style(样式) 是一种用于统一管理控件外观和行为的重要机制。通过样式,你可以将一组属性设置(如颜色、字体、边距等)封装起来,并应用到多个控件上,从而提高代码复用性和维护性。

1. 基本语法

样式通过 <Style> 标签定义,通常放置在 Resources 部分(如 Window.Resources、Application.Resources 或控件级资源)

<Window.Resources>
    <!-- 定义样式 -->
    <Style TargetType="Button" x:Key="MyButtonStyle">
        <Setter Property="Background" Value="LightBlue"/>
        <Setter Property="FontSize" Value="16"/>
        <Setter Property="Margin" Value="5"/>
    </Style>
</Window.Resources>

  • TargetType: 指定样式应用的目标控件类型(如 Button、TextBox)。

  • x:Key: 样式的唯一标识符(可选,若省略则为隐式样式)。

  • Setter: 定义属性的具体值(如 Background、FontSize)。

2. 应用样式

显式应用样式

通过 StaticResource 引用样式的 x:Key:

<Button Style="{StaticResource MyButtonStyle}" Content="Click Me"/>

隐式样式

如果省略 x:Key,样式会自动应用到所有 TargetType 指定的控件:

<!-- 隐式样式 -->
<Style TargetType="Button">
    <Setter Property="Foreground" Value="Red"/>
</Style>

<!-- 所有 Button 自动应用此样式 -->
<Button Content="OK"/>
<Button Content="Cancel"/>

3. 样式继承

通过 BasedOn 属性继承现有样式:

<Style TargetType="Button" x:Key="BaseButtonStyle">
    <Setter Property="Background" Value="LightGray"/>
</Style>

<Style TargetType="Button" x:Key="DerivedButtonStyle" BasedOn="{StaticResource BaseButtonStyle}">
    <Setter Property="Foreground" Value="Blue"/>
</Style>

4.应用举例

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="76" Width="540">
    <Window.Resources>
        <!-- 定义样式 -->
        <!--TargetType: 指定样式应用的目标控件类型(如 Button、TextBox)-->
        <!--x:Key: 样式的唯一标识符(可选,若省略则为隐式样式)。-->
        <!--Setter: 定义属性的具体值(如 Background、FontSize)。-->
        <Style x:Key="BaseButtonStyle" TargetType="Button">
            <Setter Property="Height" Value="30"/>
            <Setter Property="Width" Value="120"/>
            <Setter Property="Margin" Value="4"/>
            <Setter Property="Foreground" Value="Black"/>
        </Style>
        <!--通过 BasedOn 属性继承现有样式-->
        <Style x:Key="InfoButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
            <Setter Property="Background" Value="AntiqueWhite"/>
        </Style>
        <Style x:Key="SuccessButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
            <Setter Property="Background" Value="Green"/>
        </Style>
        <Style x:Key="WarnButtinStyle" TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
            <Setter Property="Background" Value="Yellow"/>
        </Style>
        <Style x:Key="ErrorButtinStyle" TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </Window.Resources>
    <Grid>
        <WrapPanel Margin="10px">
            <!--通过 StaticResource 引用样式的 x:Key-->
            <!--如果省略 x:Key,样式会自动应用到所有 TargetType 指定的控件-->
            <Button Content="Info Button" Style="{StaticResource InfoButtonStyle}"/>
            <Button Content="Success Button" Style="{StaticResource SuccessButtonStyle}"/>
            <Button Content="Warn Button" Style="{StaticResource WarnButtinStyle}"/>
            <Button Content="Error Button" Style="{StaticResource ErrorButtinStyle}"/>
        </WrapPanel>
    </Grid>
</Window>