You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinUI项目如何为同一控件添加多个ExpressionAnimation动画

问题原因

你遇到的异常是UIElement扩展的StartAnimation方法对Translation子属性的绑定限制导致的。该方法在处理同一属性组下的多个子属性动画时,会被合成系统判定为无效参数冲突,因此抛出System.ArgumentException。

解决方案

改为直接操作控件对应的CompositionVisual来启动动画,即可正常同时运行多个指向不同目标属性的表达式动画:

// 先获取按钮对应的合成视觉对象
var buttonVisual = ElementCompositionPreview.GetElementVisual(button1);

ExpressionAnimation anim1 = _compositor.CreateExpressionAnimation();
anim1.Expression = "-((self.Scale.X - 1) * (self.ActualSize.X * 0.01) * 50)";
anim1.Target = "Translation.X";

ExpressionAnimation anim2 = _compositor.CreateExpressionAnimation();
anim2.Expression = "-((self.Scale.Y - 1) * (self.ActualSize.Y * 0.01) * 50)";
anim2.Target = "Translation.Y";

// 引用参数绑定到视觉对象而非UIElement,表达式逻辑保持兼容
anim1.SetExpressionReferenceParameter("self", buttonVisual);
anim2.SetExpressionReferenceParameter("self", buttonVisual);

// 通过视觉对象启动两个动画,不会产生冲突
buttonVisual.StartAnimation(anim1);
buttonVisual.StartAnimation(anim2);

补充说明

  • 单个ExpressionAnimation只能指定一个Target属性,无法同时更新多个属性,要实现多属性同步更新必须创建多个独立的表达式动画实例。
  • CompositionVisual的StartAnimation原生支持同时运行多个指向不同目标属性的动画,只要目标属性不重复就不会产生冲突。

内容的提问来源于stack exchange,提问作者Eugen M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:39:00