首页 > 其他分享 >WPF中的触发器——Trigger

WPF中的触发器——Trigger

时间:2023-09-30 16:44:52浏览次数:42  
标签:触发 触发器 DataTrigger MultiDataTrigger Trigger WPF

trigger主要运用的场景在Style、ControlTemplate、DataTemplate三个地方。在这些地方可以使用trigger,具体视情况而定。

1.属性触发器(Property Trigger)

一般用于自身Dependency Property的值发生改变时触发

2.数据触发器(DataTrigger)

Trigger都是专对于控件自身的依赖属性(dependency properties)。DataTrigger是一般专对于另的控件的属性,而且都是用绑定来实现的。
俩种用法
第一种:-支持Binding

<Style TargetType="Border">`
<Style.Triggers>
    `<DataTrigger Binding="{Binding WindowState,RelativeSource={RelativeSource AncestorType=Window}}" Value="Normal">`
        `<Setter Property="CornerRadius" Value="0,8,0,0"/>`
    `</DataTrigger>`
    `<DataTrigger Binding="{Binding WindowState,RelativeSource={RelativeSource AncestorType=Window}}" Value="Maximized">`
        `<Setter Property="CornerRadius" Value="0"/>`
    `</DataTrigger>`
     </Style.Triggers>
     `</Style>`

第二种:

`<Style TargetType="{x:Type ListBoxItem}">`

    <Style.Triggers>

    `<DataTrigger Binding="{Binding Path=Role}" Value="Admin">`

    `<Setter Property="Foreground" Value="Red" />`

    `</DataTrigger>`

    </Style.Triggers>

</Style>
3.事件触发器(EventTrigger)

Eventtrigger一般用于动画效果的处理。上面俩个触发器作用对象都是属性。而这个却是作用于事件的。表示当前某个事件发生后要触发。
一般配合动画使用,它的内部不能是简单的Setter集合,而必须是TriggerAction的实例。

`<Grid>`
        `<Button Margin="15" Width="200" Name="myButton">`
            Click Me to Animate Drop Shadow!
            <Button.BitmapEffect>
                `<DropShadowBitmapEffect x:Name="myDropShadowBitmapEffect" Color="Black" ShadowDepth="0" />`
            </Button.BitmapEffect>
            <Button.Triggers>
                `<EventTrigger RoutedEvent="Button.Click">`
                    `<BeginStoryboard>`
                        `<Storyboard>`
                            `<ThicknessAnimation Storyboard.TargetProperty="Margin" Duration="0:0:0.5" 
                                                From="50,50,50,50" To="0,0,50,50" AutoReverse="True" />`
                            `<DoubleAnimation Storyboard.TargetName="myDropShadowBitmapEffect" 
                                             Storyboard.TargetProperty="ShadowDepth" 
                                             From="0" To="30" Duration="0:0:0.5" AutoReverse="True" />`
                            `<DoubleAnimation Storyboard.TargetName="myDropShadowBitmapEffect" 
                                             Storyboard.TargetProperty="Softness" 
                                             From="0" To="1" Duration="0:0:0.5" AutoReverse="True" />`
                        `</Storyboard>`
                    `</BeginStoryboard>`
                `</EventTrigger>`
            </Button.Triggers>
        `</Button>`
    `</Grid>`
--多条件触发器(MultiDataTrigger)

上面的触发器应该来讲算是比较简单而又常用。可是都是单个触发条件。我们在编写业务代码的时候,往往可以存在多个条件下的触发效果。所以上面的Trigger和DataTrigger就不能满足需求了。为了这种情况,WPF为Trigger提供了MultiTrigger,为DataTrigger提供了MultiDataTrigger。除了语法上有一定的区别以外,效果是一样子的。

`<TextBlock Text="I am Aomi" Width="75" Height="20">`
            <TextBlock.Style>
                `<Style TargetType="TextBlock">`
                    <Style.Triggers>
                        `<MultiTrigger>`
                            <MultiTrigger.Conditions>
                                `<Condition Property="IsEnabled" Value="True" />`
                                `<Condition Property="IsMouseOver" Value="True" />`
                            </MultiTrigger.Conditions>
                            `<Setter Property="Background" Value="#4d4d4d" />`
                        `</MultiTrigger>`
                    </Style.Triggers>
                `</Style>`
            </TextBlock.Style>
        `</TextBlock>`

MultiDataTrigger的用法
`<TextBlock Text="I am Aomi" Width="75" Height="20">`
            <TextBlock.Style>
                `<Style TargetType="TextBlock">`
                    <Style.Triggers>
                        `<MultiDataTrigger>`
                            <MultiDataTrigger.Conditions>
                                `<Condition Binding="{Binding IsChecked,ElementName=Changer  }" Value="True" />`
                                `<Condition Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self} }" Value="True" />`
                            </MultiDataTrigger.Conditions>
                            `<Setter Property="Foreground" Value="Red" />`
                        `</MultiDataTrigger>`
                    </Style.Triggers>
                `</Style>`
            </TextBlock.Style>
        `</TextBlock>`

标签:触发,触发器,DataTrigger,MultiDataTrigger,Trigger,WPF
From: https://www.cnblogs.com/ckblogs/p/17737996.html

相关文章

  • wpf ListViewItem 怎么设置圆角并有阴影效果,请给出 详细的 xaml代码
    以下是一段详细的XAML代码示例,展示了如何为WPF的ListViewItem设置圆角和阴影效果:<ListView><ListView.ItemContainerStyle><StyleTargetType="ListViewItem"><SetterProperty="Template"><Sette......
  • Tekton触发器请求流程
    Tekton是一个用于构建、测试和部署云原生应用程序的开源框架。Tekton触发器(TektonTriggers)是Tekton的一个组件,它允许你定义和触发任务和管道的执行。触发器可以基于事件来触发任务或管道的执行,这些事件可以是源代码的提交、镜像的推送、定时触发等。......
  • 记一次 .NET 某金融企业 WPF 程序卡死分析
    ##一:背景###1.讲故事前段时间遇到了一个难度比较高的dump,经过几个小时的探索,终于给找出来了,在这里做一下整理,希望对大家有所帮助,对自己也是一个总结,好了,老规矩,上WinDBG说话。##二:WinDbg分析###1.为什么会卡死既然程序卡死,那肯定是被冻住了,所以看下主线程此时在做什么。......
  • 界面组件DevExpress WPF v23.2新功能预览 - 更轻量级的主题
    本文主要描述了DevExpressWPF即将在几个月之后发布的v23.2中包含的新功能,持续关注我们获取更多最新资讯哦~P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程......
  • ansible-playbook-handlers和notify 触发器
    HandlersHandlers是AnsiblePlaybook中的一种特殊任务,无法直接运行。它需要被其他任务通知后才会运行。它的主要作用是处理Playbook中各个任务之间的通知和协调。当某个任务完成后,如果满足特定条件,就会触发相应的Handler任务。NotifyNotify是AnsiblePlaybook中的一个触发器,它......
  • WPF 将字符串按固定位数间隔展示
    使用转换器,将字符串值做处理:usingSystem;usingSystem.Collections.Generic;usingSystem.Globalization;usingSystem.Linq;usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Data;namespaceControls.Converters{publicclassStringSpaceConvert......
  • WPF中以MVVM方式,实现RTSP视频播放
    前言视频播放在上位机开发中经常会遇到,基本上是两种常见的解决方案1.采用厂家提供的sdk和前端控件进行展示,常见的海康/大华都提供了相关sdk及文档2.开启相机onvif协议,捅过rtsp视频流进行播放,前端可以采用web方式,或者wpf中的视频控件进行展示。项目需求,决定了最终采用开启相机on......
  • [WPF] 随笔1:MVVM在ViewModel更新Image控件的BitmapImage值时报:必须在与 DependencyObj
    MVVM在ViewModel更新Image控件的BitmapImage值时报:必须在与DependencyObject相同的线程上创建DependencySource原因:必须在UI线程创建BitmapImage=>链接解决方案:使用MemoryStream加载图片,并在UI线程转换成BitmapImage=>链接接下来是我的写法Tip:我用的是MVVMLightViewM......
  • PostgreSQL教程:触发器
    触发器Trigger,是由事件触发的一种存储过程当对标进行insert,update,delete,truncate操作时,会触发表的Trigger(看触发器的创建时指定的事件)构建两张表,学生信息表,学生分数表。在删除学生信息的同时,自动删除学生的分数。先构建表信息,填充数据createtablestudent(idint,namev......
  • 搭建Wpf框架(17) ——大文件上传与下载
    先上效果图:大文件上传1.客户端需要按照块拆成一块一块,先计算大小,然后计算块的个数,然后按块逐个上传,代码如下:public async Task<UploadResult> UploadFileChunck(string path, Action<double> progressAction)        {            try      ......