C# UWP视觉偏移动画不工作
对于我的应用程序,我希望能够使用合成API来设置UIElement偏移量的动画 这个元素是在Xaml中预定义的,我发现这些控件的视觉层只有在触发动画后才被计算出来 此行为导致动画仅在第二次调用时显示 我的XamlC# UWP视觉偏移动画不工作,c#,uwp,composition,C#,Uwp,Composition,对于我的应用程序,我希望能够使用合成API来设置UIElement偏移量的动画 这个元素是在Xaml中预定义的,我发现这些控件的视觉层只有在触发动画后才被计算出来 此行为导致动画仅在第二次调用时显示 我的Xaml 我的代码 private void ShowNextButtons(UIElement Item1, UIElement Item2) { var _compositor = ElementCompositionPreview.GetElementVisual(this).
我的代码
private void ShowNextButtons(UIElement Item1, UIElement Item2) {
var _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
var visual1 = ElementCompositionPreview.GetElementVisual(Item1);
visual1.CenterPoint = new Vector3(0, (float) Item1.RenderSize.Height / 2F, 0);
var animationGroup1 = _compositor.CreateAnimationGroup();
var offset1 = visual1.Offset; //First Time: Offset = <0,0,0>
var fadeOut = _compositor.CreateScalarKeyFrameAnimation();
fadeOut.Target = "Opacity";
fadeOut.Duration = TimeSpan.FromMilliseconds(1000);
fadeOut.InsertKeyFrame(0, 1);
fadeOut.InsertKeyFrame(1, 0);
//animationGroup1.Add(fadeOut); Not included: To be able to click a second time
var slideOut = _compositor.CreateScalarKeyFrameAnimation();
slideOut.Target = "Offset.X";
slideOut.Duration = TimeSpan.FromMilliseconds(1000);
slideOut.InsertKeyFrame(0, offset1.X);
slideOut.InsertKeyFrame(1, offset1.X - 20F);
animationGroup1.Add(slideOut);
visual1.StartAnimationGroup(animationGroup1);
}
private void显示下一个按钮(UIElement Item1、UIElement Item2){
var\u compositor=ElementCompositionPreview.GetElementVisual(this.compositor);
var visual1=ElementCompositionPreview.GetElementVisual(Item1);
visual1.CenterPoint=新矢量3(0,(浮动)项1.RenderSize.Height/2F,0);
var animationGroup1=_compositor.CreateAnimationGroup();
var offset1=visual1.Offset;//第一次:Offset=
var fadeOut=_compositor.CreateScalarKeyFrameAnimation();
淡出目标=“不透明度”;
衰减持续时间=时间跨度从毫秒(1000);
淡出插入关键帧(0,1);
淡出.插入关键帧(1,0);
//animationGroup1.添加(淡出);不包括:能够再次单击
var slideOut=_compositor.CreateScalarKeyFrameAnimation();
slideOut.Target=“Offset.X”;
滑出持续时间=TimeSpan.From毫秒(1000);
滑出.插入关键帧(0,偏移1.X);
滑出.插入关键帧(1,偏移量1.X-20F);
animationGroup1.添加(滑出);
visual1.StartAnimationGroup(动画组1);
}
Offset.X
动画仅在第二次调用该方法时可见您很可能遇到合成和XAML位置属性相互冲突的问题
最简单的解决方案是将正在制作动画的内容包装在边框内,并将任何布局特性应用于这些边框(如边距),然后偏移动画现在应该可以处理正在制作动画的内容(因为XAML布局引擎现在应该没有理由用相对XAML位置覆盖动画目标上的合成偏移属性)
或者,如果您的目标是Creators Update,则可以改为制作合成翻译属性的动画。请参阅:您需要显示代码的完整示例。我们不知道您正在制作哪个元素的动画,以及是什么触发了动画。我正在制作Stackpanel的动画,很抱歉:)尝试删除
堆栈面板上的边距,看看是否有效。通过在项目属性中更改,我将项目更改为仅针对创建者更新。我不能在你的最后一个链接中使用解决方案,但是。。。我缺少什么?NVM,找到了:链接上写着:enabletransation
,应该是SetIsTranslationEnabled
aa,第二个链接断了。链接断了,但以下解决方案对我有效:ElementCompositionPreview::SetIsTranslationEnabled(YourElement,true)代码>YourElementVisual->StartAnimation(“翻译”,YourExpression)代码>