WPF学习记录 二、Style样式
样式可以像css那样,把属性写到公共的地方,然后各个需要用到的控件再去引用
1、最简单的样式Demo
下面是定义一个最简单的样式,然后让2个按钮去引用:
<Window.Resources> <Style x:Key="buttonStyle" TargetType="Button"> <Setter Property="FontSize" Value="35"></Setter> <Setter Property="Foreground" Value="Red"></Setter> </Style> </Window.Resources> <Grid> <DockPanel LastChildFill="False"> <Button Width="100" Style="{ StaticResource buttonStyle}" DockPanel.Dock="Left" Height="60" Content="test"></Button> <Button Width="100" Style="{ StaticResource buttonStyle}" DockPanel.Dock="Top" Height="60" Content="test"></Button> </DockPanel> </Grid>
其中:key是主键,用于其它需要用到这个样式的控件来引用,TargetType后面的值是控件类型,上图示例的是button,还可以是文本框,下拉框等,引用的时候,要使用 StaticResource
2、样式的继承
使用BaseOn来设置,如下图的代码:
<Window.Resources> <Style x:Key="baseButtonStyle" TargetType="Button"> <Setter Property="FontSize" Value="35"></Setter> <Setter Property="Foreground" Value="Red"></Setter> </Style> <Style x:Key="buttonStyle" TargetType="Button" BasedOn="{ StaticResource baseButtonStyle}"> <Setter Property="Width" Value="200"></Setter> </Style> </Window.Resources> <Grid> <DockPanel LastChildFill="False"> <Button Style="{ StaticResource buttonStyle}" DockPanel.Dock="Left" Height="60" Content="test"></Button> <Button Style="{ StaticResource buttonStyle}" DockPanel.Dock="Top" Height="60" Content="test"></Button> </DockPanel> </Grid>
3、样式的触发
1):简单触发
使用触发可以来实现,如:鼠标移上变色等功能
<Window.Resources> <Style x:Key="buttonStyle" TargetType="Button"> <Setter Property="Width" Value="200"></Setter> <Setter Property="FontSize" Value="35"></Setter> <Setter Property="Foreground" Value="Red"></Setter> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Foreground" Value="White"></Setter> </Trigger> </Style.Triggers> </Style> </Window.Resources> <Grid> <DockPanel LastChildFill="False"> <Button Style="{ StaticResource buttonStyle}" DockPanel.Dock="Left" Height="60" Content="test"></Button> <Button Style="{ StaticResource buttonStyle}" DockPanel.Dock="Top" Height="60" Content="test"></Button> </DockPanel> </Grid>
2):多条件触发
如面代码示例,在满足按钮既获得焦点,然后又鼠标移上后才变色
<Window.Resources> <Style x:Key="buttonStyle" TargetType="Button"> <Setter Property="Width" Value="200"></Setter> <Setter Property="Height" Value="25"></Setter> <Setter Property="FontSize" Value="20"></Setter> <Setter Property="Foreground" Value="Red"></Setter> <Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsMouseOver" Value="True"></Condition> <Condition Property="IsFocused" Value="True"></Condition> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter Property="Foreground" Value="Blue"></Setter> </MultiTrigger.Setters> </MultiTrigger> </Style.Triggers> </Style> </Window.Resources> <Grid> <DockPanel LastChildFill="False"> <Button Style="{ StaticResource buttonStyle}" DockPanel.Dock="Left" Content="test"></Button> <Button Style="{ StaticResource buttonStyle}" DockPanel.Dock="Top" Content="test"></Button> </DockPanel> </Grid>
3):事件触发
下面的代码实现了,鼠标移上字变小,移开字变大
<Window.Resources> <Style x:Key="buttonStyle" TargetType="Button"> <Setter Property="Width" Value="200"></Setter> <Setter Property="Height" Value="25"></Setter> <Setter Property="FontSize" Value="20"></Setter> <Setter Property="Foreground" Value="Red"></Setter> <Style.Triggers> <EventTrigger RoutedEvent="Mouse.MouseEnter"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Duration="0:0:0:0.2" Storyboard.TargetProperty="FontSize" To="1"> </DoubleAnimation> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> <EventTrigger RoutedEvent="Mouse.MouseLeave"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Duration="0:0:0:0.2" Storyboard.TargetProperty="FontSize" To="20"> </DoubleAnimation> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </Style.Triggers> </Style> </Window.Resources> <Grid> <DockPanel LastChildFill="False"> <Button Style="{ StaticResource buttonStyle}" DockPanel.Dock="Left" Content="test"></Button> <Button Style="{ StaticResource buttonStyle}" DockPanel.Dock="Top" Content="test"></Button> </DockPanel> </Grid>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?