Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP视觉偏移动画不工作_C#_Uwp_Composition - Fatal编程技术网

C# UWP视觉偏移动画不工作

C# UWP视觉偏移动画不工作,c#,uwp,composition,C#,Uwp,Composition,对于我的应用程序,我希望能够使用合成API来设置UIElement偏移量的动画 这个元素是在Xaml中预定义的,我发现这些控件的视觉层只有在触发动画后才被计算出来 此行为导致动画仅在第二次调用时显示 我的Xaml 我的代码 private void ShowNextButtons(UIElement Item1, UIElement Item2) { var _compositor = ElementCompositionPreview.GetElementVisual(this).

对于我的应用程序,我希望能够使用合成API来设置UIElement偏移量的动画 这个元素是在Xaml中预定义的,我发现这些控件的视觉层只有在触发动画后才被计算出来

此行为导致动画仅在第二次调用时显示

我的Xaml


我的代码

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)