wpf之样式

前言

wpf的style样式用于将一组属性设置封装起来放置于资源文件中,从而轻松地应用到多个元素上,从而实现 UI 的统一和换肤功能,style主要有Setter、Trigger两个特性,

1、Setter

下面的代码中使用style通过Setter封装了三个属性Background、Foreground、FontSize,让这三个属性成为一个样式,并且通过TargetType="Button"来指定Button控件使用这个样式,并且使用x:Key="MyButtonStyle"来为这个样式起了一个名称,并且这个样式放置于Window.Resources中使样式成为了资源文件。最后使用Button时,通过Style="{StaticResource MyButtonStyle}"来让Button使用指定的样式.

csharp 复制代码
<Window x:Class="wpf之Style.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:wpf之Style"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <Style x:Key="MyButtonStyle" TargetType="Button">
            <Setter Property="Background" Value="Red" />
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="FontSize" Value="25"/>
        </Style>
    </Window.Resources>
    <Grid>
        <StackPanel >
            <Button  Height=" 100" Style="{StaticResource MyButtonStyle}"  Content="样式Button"/>
            <Button  Height=" 100" Content="普通Button" />
        </StackPanel >
    </Grid>
</Window>

2、运行结果

从运行结果可以看出,使用了样式的Button,背景色、字体颜色、字体大小和不使用样式的Button比都得到了改变。

2、Trigger

Trigger称为触发器,Property是触发器关注的属性,Value是触发的条件,下面的代码中使用了两个触发器,当CheckBox的IsChecked为true时,背景色设置为Green,否则设置为红色

csharp 复制代码
<Window x:Class="wpf之Style.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:wpf之Style"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <Style x:Key="MyCheckBoxStyle" TargetType="CheckBox" >
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True" >
                    <Setter Property="Background" Value="Green"    />
                </Trigger>
                <Trigger Property="IsChecked" Value="False"  >
                    <Setter Property="Background" Value="Red"  />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <StackPanel Orientation="Vertical" >
            <CheckBox   Style="{StaticResource MyCheckBoxStyle}"  Content="样式CheckBox"/>
            <CheckBox   Content="普通CheckBox" />
        </StackPanel >
    </Grid>
</Window>

1)IsChecked为true

2)IsChecked为false

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录)

1、《C#串口通信从入门到精通》

2、《C#与PLC通信从入门到精通 》

3、《C# Modbus通信从入门到精通》

4、《C#Socket通信从入门到精通 》

5、《C# MES通信从入门到精通》

6、《winform控件从入门到精通》

7、《C#操作MySql数据库从入门到精通》

相关推荐
Lost of 程序猿5 小时前
用 YARP 为 .NET 微服务搭一座“立交桥“:路由转发与生产配置实践
c#·asp.net
点纭8 小时前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#
用户788477316349 小时前
用 .NET MAUI 一套 C# 同时出 Windows 和 Android:哪些是真能共享,哪些是 marketing
c#
dalong109 小时前
WPF:Modbus 状态监控
wpf·modbus
Lost of 程序猿10 小时前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net
林川~0120 小时前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
He BianGu1 天前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster
tang_04271 天前
【Hi.Ltd 专题】第9期:Interop 配置互操作(JSON/INI/XML/YAML/注册表/扫码)
经验分享·c#·hi.ltd系列
tang_04271 天前
【Hi.Ltd 专题】第7期:Threading 采集线程、锁与 LRU 缓存
经验分享·c#·hi.ltd系列
A_nanda1 天前
C# 界面卡顿:从定位到根治
c#