C#-UWP动画重置为“从”状态

C#-UWP动画重置为“从”状态,第1张

概述我在UWP应用中有一个动画,该动画可以按预期工作(生产Windows应用商店应用),直到Windows Update 1809为止.更改了某些内容,现在动画在完成后立即重置为“从”值.示例代码:动画(旋转):    <Storyboard x:Key='FlipTest'> <DoubleAnimation

我在UWP应用中有一个动画,该动画可以按预期工作(生产Windows应用商店应用),直到windows Update 1809为止.更改了某些内容,现在动画在完成后立即重置为“从”值.

示例代码:

动画(旋转):

    

<Storyboard x:Key="FlipTest">    <DoubleAnimation                        Storyboard.Targetname="TestRotation"                        Storyboard.TargetProperty="RotationY"                        From="180"                        To="10"                        Duration="0:0:1.40"                        /></Storyboard>

动画项目:

    <TextBlock Text="Test" FontSize="18">        <TextBlock.Projection>            <PlaneProjection x:name="TestRotation" RotationY="0" />        </TextBlock.Projection>    </TextBlock>

从按钮单击开始呼叫:

private voID button_Click(object sender,RoutedEventArgs e){    Storyboard sb = (Storyboard)Resources["FlipTest"];    sb.Begin();}

预期的行为(在windows 1803上有效):
当您单击按钮时,TextBlock旋转并保持在此状态.

windows 1809上的行为:
动画结束后,但在调用Storyboard.Completed事件之前,TextBox重置为From(180度)值.

有趣的是,如果我将To =“ 0”放置在此状态.如果我放置10、190或360度,它将重置.请注意,它不会重置为原始状态(0deg),而是重置为From值(180deg).

我也将Microsoft.NETCore.UniversalwindowsPlatform更新到了最新版本(6.1.9),但它没有任何改变.

谁能解释这个现象或告诉它如何解决?我是否缺少明显的东西?

更新(丑陋的解决方法)

我发现我可以使用以下丑陋的技巧:

    sb.Completed += (s,ee) =>    {        TestRotation.RotationY = 0.01; // ugly Hack for windows Build 1809    };

但这不仅在代码中看起来很糟糕.在屏幕上,您可以看到可怕的闪烁,因为在动画之后,该项目将重置,然后再次设置为正常值.

我还注意到动画完成后RotationY保持正确的值,尽管在视觉上该项目已旋转.您可以在代码中(在完整的动画中)或在live Property Explorer中看到值为0,而在视觉上将项目旋转​​到180度.

最佳答案我相信这是一个错误,并且与情节提要的FillBehavior有关.

这一直发生在我回到第一个windows 10 Build 10240的过程中.出于某种原因,如果结果为!= 0,则使用FillBehavior.HoldEnd将状态重置为From值,而不是To值(Storyboard的值)以..结束).

在不看开源代码(最好是IMO)的情况下,我做了以下工作,使我想到了这一假设.

一直到windows 10的第一个发行版,都在windows构建上验证了您现有的代码.测试了To = 10和To =0.To= 10重置为起始From值. To = 0重置为原始值.您已经记录了这个.

将From值修改为To值之后的360度(使用随机值),以便执行完整旋转.此时,它的确停在From值,也看起来像To值,仅说Storyboard.FillBehavior = FillBehavior.HoldEnd保持From值.我知道这不是Storyboard.FillBehavior = FillBehavior.Stop,因为这每次都会在Storyboard之前重置为初始值(这是FillBehavior.Stop应该做的).

我基于所做的各种测试(包括手动编写情节提要)进行假设.

假设:

如果Storyboard.FillBehavior = FillBehavior.HoldEnd,并且Storyboard.To值不为0,则它​​将保留到Storyboard.From值完成后的任何值.

如果Storyboard.FillBehavior = FillBehavior.Stop,则它将按预期工作,并返回到动画之前该值所处的任何状态.

建议的解决方法:

尽管我看到您可以通过使用Storyboard.Completed事件来解决,但我还有另一种选择(尽管仍然不愉快),它可能更干净并消除了闪烁.它为我工作.

我用受影响的FillBehavior.Stop设置了时间轴,然后将它们动画化的属性的初始值设置为To值.

注意:在您的示例中,DoubleAnimation.Duration大于Storyboard.Duration.由于DoubleAnimation永远不会完成,这将始终导致它重置为该起始值(在本例中为From值).确保您的Storyboard.Duration至少与子级时间轴最高一样长,以防止闪烁和不良效果.

我最初以为这是您的问题,但是将情节提要设置为匹配或更好之后,您的问题仍然存在.只需知道持续时间的差异可能会导致不良的结果,尤其是在情节提要比孩子的时间轴短时.

<Storyboard x:Key="FlipTest"            Duration="0:0:1.40">    <DoubleAnimation Storyboard.Targetname="TestRotation"                     Storyboard.TargetProperty="RotationY"                     From="180"                     To="10"                     Duration="0:0:1.40"                      FillBehavior="Stop"/></Storyboard>TestRotation.RotationY = 10;Storyboard sb = (Storyboard)Resources["FlipTest"];sb.Begin();
总结

以上是内存溢出为你收集整理的C#-UWP动画重置为“从”状态 全部内容,希望文章能够帮你解决C#-UWP动画重置为“从”状态 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1244300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存