【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的
来源:互联网 发布:瑜伽软件哪个好用 编辑:程序博客网 时间:2024/05/16 12:00
初学WPF,知道一些控件可以通过定义Style的Trigger改变要显示的样式,但是经常遇到一些明明Trigger已经触发了,但是里面Setter设置的样式,却没有效果的问题。其实主要原因,是样式重复定义导致的。
举个例子:
<Border x:Name="borderQZone" BorderBrush="Cyan" BorderThickness="0" CornerRadius="2,2,2,2" Width="20" Height="20" Style="{DynamicResource BorderStyle1}" > <Border.Resources> <Style x:Key="BorderStyle1" TargetType="{x:Type Border}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="BorderThickness" Value="5"></Setter> <Setter Property="BorderBrush" Value="Red"></Setter> </Trigger> </Style.Triggers> </Style> </Border.Resources> <StackPanel> <Image x:Name="imgQzone" Width="20" Height="20" Source="Images/qzone.png" MouseLeftButtonDown="imgQzone_MouseLeftButtonDown"/> </StackPanel> </Border>
这段代码,执行后,无论你鼠标在上面经过多少次,外观样式都不会有任何改变。这是因为你在最外层的Border里已经定义了BorderBrush和BroderThickness,所以Trigger中的那两个setter不会起到任何作用,但是如果你在添加一个setter,Property设置为背景色。重新运行,你会发现这个Setter却有作用,就是因为我们在外层的Border标签中,没有定义Background属性,所以它才会有作用。
所以,到这里你应该知道如何更改你的代码了,如下:
<Border Width="50" Height="50" Style="{DynamicResource BorderStyle2}"> <Border.Resources> <Style x:Key="BorderStyle2" TargetType="{x:Type Border}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="BorderBrush" Value="Black"></Setter> <Setter Property="Background" Value="Green"></Setter> <Setter Property="BorderThickness" Value="6"></Setter> </Trigger> <Trigger Property="IsMouseOver" Value="False"> <Setter Property="BorderBrush" Value="Blue"></Setter> <Setter Property="Background" Value="Yellow"></Setter> <Setter Property="BorderThickness" Value="8"></Setter> </Trigger> </Style.Triggers> </Style> </Border.Resources> </Border>
另外,还需要注意,一旦定义了IsMouseOver为True的Trigger,也最好定义一个为False的Trigger。经实践,如果只定义一个为True的,还是没有任何现实效果。
在接下的博客中,会为大家带来一个用WPF做的仿QQ界面的一个教程。
0 0
- 【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的
- WPF设置的应用程序图标为什么不管用
- colorWithRed:有时会不管用的问题
- WPF中如何在Xaml里通过Trigger修改该其他控件的属性
- WPF中如何在Xaml里通过Trigger修改该其他控件的属性
- 创建不使用XAML的WPF程序
- 有时候你创建的索引并不管用
- 跟我一起走进WPF的世界之二为什么会出现XAML这个标记语言
- 跟我一起走进WPF的世界之二为什么会出现XAML这个标记语言
- WPF中CAD control的XAML实现
- WPF中XAML的编译过程
- WPF中XAML文件的基本格式
- WPF的XAML中字符转义
- C# 中XML XAML WPF的学习
- js中form的onsubmit不管用
- WPF中button的trigger问题
- WPF中Border控件的属性介绍
- 终于知道为什么我的ButterKnife不管用了
- Spark应用(一)提取RDD内部信息和信息放入RDD
- 重建二叉树,二叉树的镜像,二叉搜索树的后序遍历
- 最简单的Dagger2入门教程
- <26>python学习笔记——根据字典中的值的大小进行排序
- 视频开发学习路线
- 【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的
- linux arm架构下tslib1.4 移植全过程2
- ping is not recognized as internal or external command
- 如何在mac os中用快捷键添加try catch语句
- java多线程
- hdu 2084 数塔
- 如何在mac os中用快捷键添加try catch语句
- 进程和线程管理(转)
- java.lang.NullPointerException的…