WPF样式和触发器
理解样式
样式可以定义通用的格式化特征集合。
Style 类的属性
Setters、Triggers、Resources、BasedOn、TargetType
<Style x:Key="BitFontButtonStyle" TargetType="Button">
<setter Property="FontFamily" Value="Times New Roman"/>
</Style>
如果以上代码不使用x:Key ,那个TargetType属性还可以作为自动应用样式的快捷方式。
<!--删除自动应用的样式-->
<Buttn style="{x:Null}"/>
关联事件处理程序
<Style x:key="MouseOverHighLightStyle">
<EventSetter Event="TextBlock.MouseEnter" Handler="element_MouseEnter"/>
</Style>
private void element_MouseEnter(object sender,MouseEventArgs)
{
//业务代吗 事件处理程序
}
多层样式
*BaseOn *属性来设置样式的继承
<Style x:Key="NewButtonStyle" BaseOn="ButtonBaseStyle"/>
BaseOn可创建完整的样式继承链,最后设置的同一属性会覆盖基样式,样式继承的依赖会使程序变得脆弱,不建议使用样式继承。
触发器
可自动完成简单的样式改变,需要使用样板事件处理逻辑。通过 Style.Triggers集合链接到样式中,继承System.Windows.TriggerBase。
TriggerBase的继承类
Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger
通过FrameworkElement.Triggers集合可以直接为元素应用触发器。
简单触发器
<Style x:key="TextBoxStyle" >
<Style.Setters>
<Setter Property="Control.Background" Value="Red"/>
</Style.Setters>
<Style.Triggers>
<Trigger Property="Control.IsFocus" Value="True" >
<Setter Property="Control.Backgroud" Value="Yellow"/>
</Trigger>
<Trigger Property="Control.IsPressed" Value="True">
<Setter Property="Control.Background" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
以上触犯器都触发了IsFocused和IsPressed属性,那么设置的背景颜色为Blue,这不在于那个属性先触发,而是取决于触发器在标记中的排列顺序。
<Style x:key="TextBoxStyle" >
<Style.Setters>
...
</Style.Setters>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Control.IsFocused" Value="True"/>
<Condition Property="Control.IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Control.Background" Value="Pink"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
多条件的情况项不用关系声明的顺序,在改变背景颜色之前需要条件都为真。
事件触发器
<Style x:Key="BigFontButton">
<Style.Setters>
...
</Style.Setters>
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryBoard>
<DoubleAnimation Duration="0:0:0.2"
Storyboard.TargetProperty="FontSize"
To="22"/>
</BeginStoryBoard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
DoubleAnimation为Double类型动画类,位于System.Windows.Media.Aniamtion,Storyboard为故事版,为动画提供时间线,内部可以定义一个或多个动画。动画在一定时间类修改依赖项属性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!