在Button样式中添加EventSetter,理解路由事件
XML
<Window.Resources> <Style x:Key="ButtonStyle2" TargetType="{x:Type Button}"> <EventSetter Event="Click" Handler="b1SetColor"/> </Style> </Window.Resources> <Button x:Name="butrouter" Style="{DynamicResource ButtonStyle2}" Click="butrouter_Click" />
CS
private void butrouter_Click(object sender, System.Windows.RoutedEventArgs e) { // TODO: Add event handler implementation here. } private void b1SetColor(object sender, System.Windows.RoutedEventArgs e) { // TODO: Add event handler implementation here. }
先执行butrouter_Click,再执行b1SetColor
之前有个文章是说样式的设置问题,可以参考这个 wpf中的样式
本文章主要说样式中事件EventSetter和触发器trigger
1.EventSetter
EventSetter这个理解比较简单,就是给样式使用者添加一个事件,比如给按钮添加点击事件,提供了另外一个方式来给控件添加事件
比如这个style
<Style TargetType="Button">
<Setter Property="FontSize" Value="40"></Setter>
<EventSetter Event="Click" Handler="xx"></EventSetter>
</Style>
定义了一个button的style,设置字体大小
EventSetter 就是事件设置,event表示是什么事件,handler表示该事件关联哪个方法
这样的话就是说本window内的所有button都有有点击事件交给xx方法来处理
2.trigger触发器
trigger这个也是style的属性之一,触发器顾名思义就是在使用style样式的元素或者控件的某些属性发生变化的时候才会触发这个事件
trigger就定义了元素或者控件如何响应特点属性发生变化时候进行处理,比如用户输入等等,鼠标移动
典型的trigger这样定义
<Style TargetType="Button">
<Setter Property="FontSize" Value="40"></Setter>
<EventSetter Event="Click" Handler="xx"></EventSetter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="FontSize" Value="20"></Setter>
<Setter Property="Foreground" Value="blue"></Setter>
</Trigger>
</Style.Triggers>
</Style>
trigger仍在在style中定义。这个定义表示,当button有IsMouseOver的这个属性变化成True的时候,会开始对他的fontsize和foreground的属性发生变化
通过运行vs就会发现,鼠标在button上停留的时候button的字体大小会变小而且颜色会变蓝色,鼠标离开以后就会恢复回来
3.MultiTrigger
多触发器,这个意思是说只有在两个或者两个以上的属性发生变化的时候才会引发触发器,不像之前的例子一个属性变化就会引发触发器
典型语法,仍然在style中
<style>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>//罗利条件,条件的集合,
<Condition Property="IsPressed" Value="true"></Condition>
<Condition Property="IsMouseOver" Value="true"></Condition>
</MultiTrigger.Conditions>
<Setter Property="FontStyle" Value="Italic"></Setter>//在以上条件下才发生的属性变化
</MultiTrigger>
</ <Style.Triggers>>
</style>
4.datatrigger
数据触发和trigger类似,不同的是 binding代替了property属性
<style>
< Style.Triggers>
<DataTrigger Binding="{Binding ElementName=tb,Path=Text.Length}" Value="0">
<Setter Property="IsEnabled" Value="false"></Setter>
</DataTrigger>
</Style.Triggers>
</style>
这个绑定设置到了一个textbox文本控件,如果textbox控件内容为空的时候,就会引发按钮isenabled=false
当然默认启动的时候textbox内容就是为空,所以初始化的时候按钮的isenabled=false,只有文本框内容输入内容的时候按钮的isenabled才等true
此外还有一个MultiDataTrigger,可以参考3,其实一样的
深入理解 https://blog.csdn.net/lanse_my/article/details/37602547
另外分享一个绑定控件https://www.cnblogs.com/ligl/p/5636899.html WPF 绑定ListBox和ListView