Uwp 为什么不是';翻译属性(组成)是否保留?

Uwp 为什么不是';翻译属性(组成)是否保留?,uwp,windows-composition-api,xaml-composition,Uwp,Windows Composition Api,Xaml Composition,我有下面的代码,它将矩形向下平移100px,然后在完成后将矩形向右平移100px,但我希望向右平移可以保持动画Y(100px),但它不会这样做。调试时,我注意到Translation的值是(0,0,0),而不是(0100,0) 这是我的应用程序中的代码(应用程序需要有UWP目标+最小sdk 17763): 在初始动画完成后,保持Y位置的正确方法是什么?我非常确定约翰尼·韦斯特莱克的答案是正确的,但我用以下方法解决了我的问题: this.Loaded += (sender1, e1) =>

我有下面的代码,它将矩形向下平移100px,然后在完成后将矩形向右平移100px,但我希望向右平移可以保持动画Y(100px),但它不会这样做。调试时,我注意到Translation的值是(0,0,0),而不是(0100,0)

这是我的应用程序中的代码(应用程序需要有UWP目标+最小sdk 17763):


在初始动画完成后,保持Y位置的正确方法是什么?

我非常确定约翰尼·韦斯特莱克的答案是正确的,但我用以下方法解决了我的问题:

this.Loaded += (sender1, e1) =>
{
    var compositor = Window.Current.Compositor;

    ElementCompositionPreview.SetIsTranslationEnabled(Rect, true);
    var visual = ElementCompositionPreview.GetElementVisual(Rect);
    var batch = compositor.CreateScopedBatch(Windows.UI.Composition.CompositionBatchTypes.Animation);

    var vertical = compositor.CreateScalarKeyFrameAnimation();

    vertical.InsertKeyFrame(1.0f, 100f);
    vertical.Duration = TimeSpan.FromMilliseconds(2000);

    visual.StartAnimation("Translation.Y", vertical);

    batch.End();

    batch.Completed += (sender2, e2) =>
    {
        var horizontal = compositor.CreateScalarKeyFrameAnimation();

        horizontal.InsertKeyFrame(1.0f, 100f);
        horizontal.Duration = TimeSpan.FromMilliseconds(2000);

        visual.StartAnimation("Translation.X", horizontal);
    };
};

我非常肯定约翰尼·韦斯特莱克的回答是正确的,但我用以下方法解决了我的问题:

this.Loaded += (sender1, e1) =>
{
    var compositor = Window.Current.Compositor;

    ElementCompositionPreview.SetIsTranslationEnabled(Rect, true);
    var visual = ElementCompositionPreview.GetElementVisual(Rect);
    var batch = compositor.CreateScopedBatch(Windows.UI.Composition.CompositionBatchTypes.Animation);

    var vertical = compositor.CreateScalarKeyFrameAnimation();

    vertical.InsertKeyFrame(1.0f, 100f);
    vertical.Duration = TimeSpan.FromMilliseconds(2000);

    visual.StartAnimation("Translation.Y", vertical);

    batch.End();

    batch.Completed += (sender2, e2) =>
    {
        var horizontal = compositor.CreateScalarKeyFrameAnimation();

        horizontal.InsertKeyFrame(1.0f, 100f);
        horizontal.Duration = TimeSpan.FromMilliseconds(2000);

        visual.StartAnimation("Translation.X", horizontal);
    };
};

它可能在您期望它之前捕获了Rect.Translation.Y的值。也许可以尝试“水平.InsertExpressionKeyFrame”(1.0f,“Vector3(100f,this.Target.Translation.Y,0f)”`我用另一种方法解决了这个问题,但我也认为你的观点是正确的。谢谢它可能在您期望它之前捕获了Rect.Translation.Y的值。也许可以尝试“水平.InsertExpressionKeyFrame”(1.0f,“Vector3(100f,this.Target.Translation.Y,0f)”`我用另一种方法解决了这个问题,但我也认为你的观点是正确的。谢谢