关键词:
WPF 触发器不生效 触发器使用 鼠标移入变色
目的:
鼠标进入Border后,此Border的背景色发生变化
错误写法:
<!--不设置背景的话只有在子控件上方才会触发事件--> <Border CornerRadius="5" > <Border.Style> <Style TargetType="Border"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="#828385" /> </Trigger> </Style.Triggers> </Style> </Border.Style> </Border>不设置背景的话只有在子控件上方才会触发事件,是什么意思呢,如下图
只有鼠标在红色框框内才会触发背景色变化
加上背景色之后:
<Border CornerRadius="5" Background="Black" > <Border.Style> <Style TargetType="Border"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="#828385" /> </Trigger> </Style.Triggers> </Style> </Border.Style> </Border>在定义后面设置属性:Background="Black"
这种情况会导致整个触发器失效,无论鼠标在哪里都不能改变背景色:
正确写法:
<!--不设置背景的话只有在子控件上方才会触发事件--> <Border CornerRadius="5" > <Border.Style> <Style TargetType="Border"> <!--必须在这里setter才可以生效--> <Style.Setters> <Setter Property="Background" Value="Black" /> </Style.Setters> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="#828385" /> </Trigger> </Style.Triggers> </Style> </Border.Style> </Border>或者:
添加上边框线厚度>0
总结:Background != null或BorderBrush != null且BorderThickness > 0(即边框真的被绘制出来)
Border的整个矩形才会参与命中测试