【问题标题】:UWP CompositionObject Animation causes black screenUWP CompositionObject Animation 导致黑屏
【发布时间】:2019-03-15 02:29:08
【问题描述】:

此方法由点击事件触发,效果很好,只是每隔一次调用此方法时整个计算机屏幕都会变黑(例如,第一次正常,第二次黑屏,第三次正常...)有一次我太频繁地点击它,Windows 10 提示显示驱动程序失败并切换到 Windows 基本显示(我正在使用双屏)。此外,当它变黑时,光标会变成一个忙碌的标志和动画故障。其他人有这个问题吗?

    private async void oscillate()
    {

        SpringScalarNaturalMotionAnimation _springAnimation2= Window.Current.Compositor.CreateSpringScalarAnimation();
        _springAnimation2.DampingRatio = 0.3f;
        _springAnimation2.Period = TimeSpan.FromSeconds(0.02);
        _springAnimation2.InitialValueExpressions["FinalValue"] = "0";
        loginBody= ElementCompositionPreview.GetElementVisual(LoginBody);
        loginBody.Offset = new System.Numerics.Vector3(-70, 0, 0);
        loginBody.StartAnimation("Offset.X", _springAnimation2);
    }

【问题讨论】:

    标签: c# xaml uwp uwp-xaml


    【解决方案1】:

    如果动画正在运行,您应该切换到CompositionScopedBatch 并创建一个bool 字段来切换。然后注册Completed 事件以关闭您的字段。然后您可以检查此字段以说明您是否可以运行动画。或者改用字典并保留对动画的引用,以便在开始新动画之前停止它。

    https://docs.microsoft.com/en-us/uwp/api/windows.ui.composition.compositionbatchcompletedeventargs

    如何使用它的示例如下: How to I detect when an animation is stopped and properties updated?

    【讨论】:

    • 你能否详细说明如何停止动画,我试过 loginBody.StopAnimation("Offset.X");在 startAnimation 调用之前,但问题仍然存在。另外,_springAnimation 是一个类变量,为了清楚起见,我把声明放在了方法里面。
    • 我发现即使我尝试使用布尔开关来禁用点击事件或在动画期间对按钮控制执行-= {event method},屏幕仍然黑屏。奇怪的是我加了断点,清楚的看到重复点击事件没有通过bool开关,动画还是崩溃了。好像不管我做什么动作,只要在动画结束后,屏幕就会黑屏。
    • 受到您提供的链接的启发后,我终于发现了问题所在....故障不是在动画完成之前切断动画造成的,这是因为我没有创建我的自己的视觉对象。我不知道为什么,但显然将弹簧动画放在从 UI 获取的视觉效果上会导致故障。我使用了一种解决方法,我将从 UI 获取的视觉对象的 ParentForTransform 设置为我实例化的透明 spriteVisual,并改为为 spriteVisual 设置动画。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2012-03-20
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多