WPF 单个触发器、多个触发器、多条件触发器
Trigger的使用。利用Trigger对象,我们可以接收到属性变化或者事件发生,并据此做出适当的响应。Trigger本身也是支持多种类型的,下面是一个属性Trigger的例子:
<Style TargetType="ListBoxItem"> <Setter Property="Opacity" Value="0.5" /> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Opacity" Value="1.0" /> <!--其他的Setters-> </Trigger> </Style.Triggers> </Style>
这段代码设置ListBoxItem的Opacity属性的默认值为0.5。但是,在IsSelected属性为True时,ListBoxItem的Opacity属性值为1。从上面的代码还可以看出,在满足一个条件后,可以触发多个行为(定义多个Setters)。同样地,上面的Triggers也是一个集合,也可以添加多个Trigger。
注意上面的多个Trigger是相互独立的,不会互相影响。另一种情况是需要满足多个条件时才触发某种行为。为此,WPF提供了MultiTrigger以满足这种需求。比如:
<Style TargetType="{x:Type Button}"> <Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsMouseOver" Value="True" /> <Condition Property="Content" Value="{x:Null}" /> </MultiTrigger.Conditions> <Setter Property="Background" Value="Yellow" /> </MultiTrigger> </Style.Triggers> </Style>
这就表示只有IsMouseOver为True、Content为NULL的时候才将Background设置为Yellow。
以上的Trigger都是基于元素属性的。对于鼠标移动等事件的处理;
WPF有专门的EventTrigger。但因EventTrigger多数时候是和Storyboard配合使用的;
现在所讨论的Trigger都是基于属性的值或者事件的。
温馨提醒:
对于小的应用程序,这个ControlTemplate一般直接定义在XAML的根元素。对于大的应用程序,通常应该定义在专门的资源XAML文件中,根元素是ResourceDictionary。
不管定义在什么地方,除了前面用Style定义外观,以及用Resource实现元素重用外
<ControlTemplate x:Key="templateThermometer" TargetType="{x:Type ProgressBar}"> <ControlTemplate.Resources> <RadialGradientBrush x:Key="brushBowl" GradientOrigin="0.3 0.3"> <GradientStop Offset="0" Color="Pink" /> <GradientStop Offset="1" Color="Red" /> </RadialGradientBrush> </ControlTemplate.Resources> <!-- 忽略其他相关内容--> </ControlTemplate>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2018-04-09 Android 属性动画
2018-04-09 Android动画之逐帧动画(FrameAnimation)详解
2018-04-09 Android 动画:你真的会使用插值器与估值器吗?
2018-04-09 View动画(补间动画)
2018-04-09 Android动画分类