WPF使用触发器需要注意优先级问题解决
短信预约 -IT技能 免费直播动态提醒
一、问题开始
现在有个需求:
初始状态(未选中)的时候,CheckBox的Content 为 “乒乓球”,然后选中之后,将“乒乓球”就改为“我爱乒乓球” 并且将文字加粗变为红色。
然后就编写代码如下:
<Window.Resources>
<Style x:Key="cb" TargetType="{x:Type CheckBox}">
<Setter Property="Foreground" Value="Green"></Setter>
<Setter Property="FontSize" Value="20"></Setter>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="我爱乒乓球"></Setter>
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<WrapPanel VerticalAlignment="Top" Background="LightBlue">
<CheckBox Content="乒乓球" Style="{StaticResource cb}" Margin="10"></CheckBox>
</WrapPanel>
实现效果如下:
奇怪了,为什么文字没有改变呢?
二、问题说明
以上问题就是使用触发器初期很容易犯的错误:没有注意样式设置的优先级。
如上案例中:<CheckBox Content="乒乓球" Style="{StaticResource cb}" Margin="10"></CheckBox>
将CheckBox自身的元素标签上设置了Content,这里设置的属性具有最高的优先级,那么元素标签就不会再去使用其他地方设置的属性值,因此无论其他地方如何改变都不会生效。
三、问题订正
解决该问题只需要将需要在触发器中需要设置的属性中,将默认值设置到样式内,而不是设置在标签元素自身上。代码如下所示:
<Window.Resources>
<Style x:Key="cb" TargetType="{x:Type CheckBox}">
<Setter Property="Foreground" Value="Green"></Setter>
<Setter Property="FontSize" Value="20"></Setter>
<Setter Property="Content" Value="乒乓球"></Setter>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="我爱乒乓球"></Setter>
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<WrapPanel VerticalAlignment="Top" Background="LightBlue">
<CheckBox Style="{StaticResource cb}" Margin="10"></CheckBox>
</WrapPanel>
总结
到此这篇关于WPF使用触发器需要注意优先级问题解决的文章就介绍到这了,更多相关WPF触发器优先级内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341