【WPF】DataTrigger 与 Storyboard动画

触发器系列(2) DataTrigger 触发条件: DataTrigger是以控件DataContext的属性作为触发条件 本例效果说明: 代码如下: 阅读详情

背景

动画是应用程序与用户交互的灵魂。目前接触到的更多的关于动画的 官方资料 是通过 EventTrigger.RoutedEvent 事件属性与 BeginStoryboard 配合使用来达到动画的目的。

但是当我在开发过程中需要在指定属性变更之后,才开始动画。这个属性可以是一个 int、bool 等任何类型的值。如果要实现值的绑定,在WPF中,需要使用 DataTrigger。

以下是我解决该问题时的步骤。完整代码附在最后。

添加依赖属性

创建控件(控件添加一外名称属性 )后,添加一个依赖属性 AnimateStart
创建依赖属性的目的是为了在其他地方使用这个控件的时候,可以绑定到Model的属性上。

/// <summary>
/// 动画开始
/// </summary>
public bool AnimateStart
{
    get { return (bool)GetValue(AnimateStartProperty); }
    set { SetValue(AnimateStartProperty, value); }
}

// Using a DependencyProperty as the backing store for AnimateStart.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty AnimateStartProperty =
    DependencyProperty.Register(nameof(AnimateStart), typeof(bool), typeof(SingleRecruit), 
        new PropertyMetadata(false));

在控件中,针对一个元素,在接下来的示例中,使用 Image 进行示范:

给 Image 添加 Style

同样的,与其他的 DataTrigger 使用方式相同,给 Image 添加 Style,然后在 Style.Triggers 里面设置 DataTrigger
由于 DataTrigger 继承的是 TriggerBase ,详细文档看这里。

可以使用属性 EnterActions、ExitActions 后设置动画。

<Image.Style>
    <Style TargetType="Image">
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=UC, Path=AnimateStart}" Value="true">
                <DataTrigger.EnterActions>
                </DataTrigger.EnterActions>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Image.Style>

针对 Image 控件的属性动画

如 Image.Opacity 属性,可以直接设置,不需要设置上述的 RenderTransform 节点。

<Style.Triggers>
    <DataTrigger Binding="{Binding ElementName=UC, Path=AnimateStart}" Value="true">
        <DataTrigger.EnterActions>
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                     Duration="0:0:1" BeginTime="0:0:0" 
                                     From="1" To="0.2"/>
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.EnterActions>
    </DataTrigger>
</Style.Triggers>

针对 RenderTransform 节点的动画

在 Image 里添加 RenderTransform 节点

添加 RenderTransform 节点的目的在于我们需要对其做位移、旋转、缩放、斜切动画时,需要针对该属性做设置,否则会报错。

<Image.RenderTransform>
     <TransformGroup>
         <ScaleTransform ScaleX="1"/>
         <SkewTransform/>
         <RotateTransform/>
         <TranslateTransform/>
     </TransformGroup>
 </Image.RenderTransform>

注:此时不能针对 ScaleTransform 属性设置名称 Name="ScaleProp",然后使用 Storyboard.TargetName="ScaleProp" 方法绑定到 Scale 属性中
解决办法如下,我们需要使用 Storyboard.TargetProperty 来做一次转化
重点在于这一句 Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"

<Style.Triggers>
    <DataTrigger Binding="{Binding ElementName=UC, Path=AnimateStart}" Value="true">
        <DataTrigger.EnterActions>
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                     Duration="0:0:1" BeginTime="0:0:0" 
                                     From="1" To="-1"/>
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.EnterActions>
    </DataTrigger>
</Style.Triggers>

完整代码

<Image Source="<Your Image Source Path>"
       RenderTransformOrigin="0.5,0.5">
    <Image.RenderTransform>
        <TransformGroup>
            <ScaleTransform ScaleX="1"/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </Image.RenderTransform>

    <Image.Style>
        <Style TargetType="Image">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=UC, Path=AnimateStart}" Value="true">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                                 Duration="0:0:1" BeginTime="0:0:0" 
                                                 From="1" To="0.2"/>
                                <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                                 Duration="0:0:1" BeginTime="0:0:0" 
                                                 From="1" To="-1"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>
WPF之 使用Storyboard故事板做动画效果 通过Storyboard实现位移和透明度变化动画效果 阅读详情

相关推荐

C#WPF的Style 中触发器Trigger详解

本文详解C#WPF的Style 中触发器Trigger

qq_30725967的博客 3142

【WPF属性笔记】【DataTrigger】

关于WPF属性DataTrigger的学习笔记。WPF中,根据数据的值不同,UI的界面随之改变(显示控件、隐藏控件以及改变控件的其他属性),这时我们可以用DataTrigger。

Aflashstar的博客 5211

WPF基础动画实现与应用实战

WPF的动画系统构建在依赖属性(DependencyProperty)与渲染分离线程的架构之上,通过时钟驱动机制实现高精度、流畅的视觉过渡。其核心在于将动画定义为对属性值随时间变化的过程控制,借助Timeline及其派生类描述时间行为,并由WPF的组合引擎(Composition Engine)在独立的渲染线程中执行,避免UI线程阻塞。// 示例:一个简单的依赖属性动画逻辑骨架该设计实现了声明式动画编程。

weixin_34520664的博客 877

WPF动画如何使用?炫酷的WPF UI必须掌握,赶紧学起来

使用WPF,可以轻松地创建复杂的图形和动画,实现各种交互效果,以及使用各种不同的数据绑定和样式。无论你是初学者还是有经验的开发人员,都可以通过学习WPF来开发具有创新性和吸引力的应用程序。赶紧学起来吧!

Documentlv的博客 4771

Unity WebGL项目如何实现画布透明,完美融入网页背景(附.jslib文件与完整配置)

本文详细解析了Unity WebGL项目实现画布透明化的技术原理与实战步骤,从.jslib文件配置到前端框架集成,帮助开发者解决默认背景色问题,实现3D内容与网页设计的无缝融合。重点介绍了透明化核心机制、常见误区及React/Vue等现代框架中的最佳实践方案。

weixin_31896061的博客 300

ESP32-CAM与TFT屏幕实时图像传输:Arduino环境下的OV2640驱动实践

本文详细介绍了在Arduino环境下实现ESP32-CAM与TFT屏幕实时图像传输的完整实践方案。重点解析了OV2640摄像头的驱动配置、硬件引脚连接、TFT屏幕初始化及图像显示优化技巧,帮助开发者快速构建稳定的实时图像显示系统,适用于物联网监控、门禁系统等场景。

cuda7parallel的博客 115

WPF动画从入门到实战:时钟机制、Storyboard与看板动效设计

在现代界面设计中,动效不再是点缀,而是提升信息传达效率与用户感知的关键。WPF作为Windows生态中的成熟UI框架,提供了一套基于时钟驱动、声明式的动画体系,与传统的Timer逐帧控制有本质区别。其核心机制围绕依赖属性、时间线、Storyboard与Clock展开,开发者无需手动管理帧调度,即可实现平滑、可控的数值动画。这一能力在数据看板、实时状态展示等高频交互场景中尤为实用,例如数字滚动、Loading旋转、折线生长等效果,不仅让界面更具活力,也使数据变化更易被用户感知。文章从底层原理出发,结合MVVM

weixin_32175665的博客 291

LAMMPS in文件详解:从零开始手把手教你配置金属分子动力学模拟

本文详细解析了LAMMPS in文件的配置方法,手把手教你完成金属分子动力学模拟的全流程。从软件环境准备、势函数选择,到使用Materials Studio构建模型、编写in文件进行能量最小化与系统弛豫,再到实施单轴拉伸生产模拟并提取应力应变数据,最后通过Python和OVITO进行结果分析与可视化,提供了完整的实战指南和常见问题排查技巧。

weixin_28475533的博客 527

WPF动画实战:从属性机制到MVVM与3D看板全解析

WPF动画的本质是依赖属性在时间轴上的插值变化,由属性系统与时钟驱动,让界面以60帧每秒平滑过渡。与WinForm手动Timer方案不同,基于属性的动画机制使动效可声明、可复用,真正实现“让界面活起来”。理解DoubleAnimation、ColorAnimation等基础动画类型,并正确选择RenderTransform与LayoutTransform,是性能与流畅度的关键。在MVVM模式下,用DataTrigger与命令绑定驱动Storyboard,可让动画与业务逻辑解耦。面对3D看板、Modbus大屏

weixin_33290540的博客 219

大整数因数分解工具——yafu

可以将大整数放在一个新建文件中——data.txt,最后面一定要换行,不然会出现eof;done processing batchfile,运行命令。2.点击设置——系统——系统信息——高级系统设置——环境变量——点击PATH(上下都可以)——新建 添加yafu-x64.exe 所在路径——点击确定。,如果整数数过长,会出现错误mismatched parens;1.找到yafu-x64.exe 所在的文件路径。如果出现以下图像,说明配置成功。3.打开cmd,输入。

l2ohvef的博客 6156

避坑指南:RK3576+Android14适配移远5G模组(RG200U)时,我遇到的3个‘巨坑’及解决方案

本文详细记录了RK3576芯片适配Android14系统与移远RG200U 5G模组过程中遇到的三大技术难题:RIL服务启动失败、HIDL兼容性矩阵配置错误及ttyUSB权限冲突。通过实战案例提供了动态库拷贝、HIDL版本链声明和SELinux策略调整等解决方案,帮助开发者高效完成5G模组集成,特别适用于基于kernel6.1的嵌入式开发场景。

weixin_30664051的博客 390

WPF为 Border 应用绑定动画错误

**数据绑定** 触发器 为border应用 颜色动画 报错 入坑

dbcalgj的博客 558

Matlab实战:从零搭建弹道导弹六自由度仿真模型(附完整代码)

本文详细介绍了如何使用Matlab从零搭建弹道导弹六自由度仿真模型,涵盖仿真环境配置、核心运动方程实现、气动力建模及仿真结果分析。通过完整代码示例,帮助读者掌握弹道导弹六自由度仿真的关键技术,适用于航空航天工程和复杂系统建模领域。

x8y9z0的博客 947

WPF动画系统从原理到实践:反馈、MVVM集成与性能优化

在桌面应用开发中,动画早已不是可有可无的装饰,而是提升操作反馈与产品质感的关键技术。WPF作为成熟的UI框架,其动画系统以依赖属性为落点,通过时间线与时钟机制持续驱动界面状态变化,让元素的移动、旋转、缩放与淡入淡出既流畅又可控。无论是加载等待、数据可视化过渡,还是MVVM模式下的状态响应,动画都能在数据与视图之间建立自然的视觉反馈。然而,实际工程中常遇到动画显示不全、卡顿、坐标系混淆等问题,这往往源于对RenderTransform、ClipToBounds以及RenderTransformOrigin的运

weixin_30086969的博客 211

告别黑窗口:XShell+X11转发图形化界面的5分钟保姆级教程(附Xming配置)

本文详细介绍了如何使用XShell和X11转发技术快速实现Linux图形化界面的远程访问。通过5分钟快速配置指南,包括服务端设置、客户端工具选择及XShell+Xming的完美配置,帮助用户高效运行GUI应用程序,提升远程工作效率。特别适合需要图形化操作的开发者和运维人员。

weixin_29223603的博客 328

DPABISurf使用教材

严老师的官方教程:http://rfmri.org/Course DPABISurf版本:dpabi50docker.tar.gz MATLAB版本:2018b 一、数据准备 (1)如果是数据的DICOM格式,整理成以下格式(注意文件夹的命名方式): 如果觉得不是很清楚,可以在官网下载Demo数据(http://rfmri.org/DemoData),参照里面的文件格式进行整理即可。 (2)如果数据是nii格式,整理成以下格式: 这里没有使用官网的demo数据进行学习,而是..

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 8520

WPF之数据触发器 改变控件背景色或闪烁

需求,很多矩形表示桶,其中:空桶=红色,满桶=绿色,使用中=红绿闪烁。 <Window x:Class="FlickerDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft...

weixin_34115824的博客 1043

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WPF动画实战指南:从依赖属性到Storyboard的性能优化与技巧

UI动画的核心并非逐帧绘制,而是通过属性插值实现状态过渡。WPF基于依赖属性体系,借助Clock驱动属性自动变化,开发者只需声明起止值与时长即可实现流畅动效。这种属性驱动机制天然支持数据绑定与触发器,让动画与业务逻辑紧密结合,显著提升界面表现力。在实际工程中,合理选型Storyboard与BeginAnimation,正确使用RenderTransform以避免触发布局,并善用缓动函数塑造自然手感,是保证动画性能与质量的关键。从加载进度条到卡片翻转,WPF动画覆盖了管理后台、仪表盘等常见场景,是构建现代桌面

weixin_30074763的博客 219

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【WPF】 Storyboard 故事板动画设计深度解析

本文深入解析了WPF中的Storyboard动画设计,主要包含以下要点: Storyboard作为WPF动画系统的编排中枢,采用声明式语法和时间轴驱动模型,支持复杂动画的精确控制。 核心机制包括: 通过附加属性实现目标元素定位 提供多种动画类型(基础动画、关键帧动画、路径动画) 丰富的缓动函数库模拟物理运动效果 支持多种编排模式: 串行编排:按顺序执行动画 并行编排:同时执行多个属性动画 嵌套编排:构建层次化动画序列 交互动画:响应各种用户操作和状态变化 应用场景涵盖: 控件状态过渡 页面转场动画 微交互反

秋天好的博客 423

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WPF动画核心原理与实战:依赖属性、Storyboard与性能优化

界面动效是客户端应用体验的重要组成部分,而WPF动画凭借其声明式框架和基于依赖属性的时间线驱动机制,成为桌面端构建细腻交互的首选方案。与传统的Timer逐帧刷新不同,WPF动画通过Storyboard组织多个动画,结合Duration、RepeatBehavior、FillBehavior等参数,实现透明度、位移、缩放等属性的平滑过渡。缓动函数和关键帧则让运动轨迹更接近现实物理规律。在MVVM架构下,通过DataTrigger或Behavior驱动动画,既能保持视图模型纯净,又能实现界面状态的优雅反馈。针对

weixin_31102231的博客 273

WPF制作《三国志幻想大陆》的武将浏览列表

利用WPF制作游戏《三国志幻想大陆》的武将浏览列表,思路参考https://github.com/BYJRK/GenshinCharacterBrowser

weixin_45277117的博客 242

WPF中触发器(Trigger、DataTrigger)使用动画最简单的方式EnterActions和ExitsActions

1.当鼠标移入后执行某个动画: &lt;Style TargetType="{x:Type StackPanel}"&gt; &lt;Setter Property="RenderTransform"&gt; &lt;Setter.Value&gt; ...

weixin_34186128的博客 2069

通过数据绑定控制WPF动画启动,WPF动画开始

1.主要代码: <ControlTemplate.Triggers> <DataTrigger Binding="{Binding Open,RelativeSource={RelativeSource Self}}" Value="True"> <D...

weixin_30361753的博客 378

WPF冷知识与冷注意点1-Animation/Binding/IOC

要控制动画循环执行在xaml中有2种方式,一种是设置Storyboard的RepeatBehavior,还有一种设置Animation的RepearBehavior;这两种的区别是Animation是针对单个动画对象,Storyboard是针对整个剧本的动画对象;假设有如下动作,动画调整FontSize动画调整背景板Rectangle宽度递增动画调整背景板Retangle宽度递减其中,第一步对FontSize的动画只需要执行一次,第二步和第三步需要循环顺序执行(2-3-2-3-2-3);

weixin_45277117的博客 1067

WPF中的动画——(六)演示图板

原文:WPF中的动画——(六)演示图板前面所介绍的都是单一的动画,它只能修改单一属性。有的时候,我们需要将一组动画一起进行,对于一个按钮,我们可能有如下需求: 选择该按钮时,该按钮增大并更改颜色。 单击该按钮时,该按钮缩小并恢复其原始大小。 该按钮变成禁用时,缩小且不透明度缩减到 50%。 每个操作都同时对应进行着两个动画,此时用我们就需要用到Time...

weixin_33894992的博客 93

WPF DataGrid 行根据某个属性循环变色动画

原色 ──0.5s──→ #FF9999 ──0.5s──→ 原色 ──0.5s──→ #FF9999 → ...背景色:原色 → #FF9999 → 原色 → #FF9999 → ...(无限循环)正向 反向 正向。├── EnterActions(进入动作):启动闪烁动画。└── ExitActions(退出动作):停止闪烁动画。├── 触发条件:IsActive == True。背景色恢复到动画开始前的值(它是一个 Brush。

qq_59062726的博客 189
上一篇: 【Rider】配置WebApi项目
Tew_q
博客等级 码龄12年 8粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值