C# WPF移动动画并停留在那里

C# WPF移动动画并停留在那里,c#,wpf,animation,C#,Wpf,Animation,我是C#的新手,我正在尝试做一个简单的应用程序,其中的元素在屏幕上移动很多。经过研究,我发现了一个可以移动按钮的代码。问题是按钮返回到其原始状态(尽管不可见)。当我点击按钮时,它会移到屏幕外(正如我所希望的那样),但当我点击后(它会做反向动画),它会神奇地再次出现在屏幕上 我还试图让它在动画结束后改变位置,但这也不起作用。这是我的密码: private void ButtonOnClick(object sender, RoutedEventArgs e) { i

我是C#的新手,我正在尝试做一个简单的应用程序,其中的元素在屏幕上移动很多。经过研究,我发现了一个可以移动按钮的代码。问题是按钮返回到其原始状态(尽管不可见)。当我点击按钮时,它会移到屏幕外(正如我所希望的那样),但当我点击后(它会做反向动画),它会神奇地再次出现在屏幕上

我还试图让它在动画结束后改变位置,但这也不起作用。这是我的密码:

    private void ButtonOnClick(object sender, RoutedEventArgs e)
    {
        if (nextSlideMoving)
            return;
        nextSlideMoving = true;
        KinectTileButton target = (KinectTileButton)sender;
        Vector offset = VisualTreeHelper.GetOffset(target);
        if (nextSlideHidden)
            moveAnimation(target, 0, offset.Y);
        else
            moveAnimation(target, -target.ActualWidth, offset.Y);
    }

    private void moveAnimation(KinectTileButton target, double newX, double newY)
    {
        Vector offset = VisualTreeHelper.GetOffset(target);
        var top = offset.Y;
        var left = offset.X;

        TranslateTransform trans = new TranslateTransform();
        target.RenderTransform = trans;

        DoubleAnimation anim1 = new DoubleAnimation(0, newY - top, TimeSpan.FromSeconds(0.5));
        trans.BeginAnimation(TranslateTransform.YProperty, anim1);
        DoubleAnimation anim2 = new DoubleAnimation(0, newX - left, TimeSpan.FromSeconds(0.5));
        anim2.Completed += new EventHandler(finishedAnimation);
        trans.BeginAnimation(TranslateTransform.XProperty, anim2);
    }

    public void finishedAnimation(Object sender, EventArgs e)
    {
        nextSlideMoving = false;
        nextSlideHidden = !nextSlideHidden;
        Console.WriteLine(nextSlideHidden);
        if (nextSlideHidden)
            nextSlide.Margin = new Thickness(-(SystemParameters.VirtualScreenWidth * 0.2), SystemParameters.VirtualScreenHeight * 0.2, SystemParameters.VirtualScreenWidth * 0.8, SystemParameters.VirtualScreenHeight * 0.2); // (LEFT, TOP, RIGHT, BOTTOM)
        else
            nextSlide.Margin = new Thickness(0, SystemParameters.VirtualScreenHeight * 0.2, SystemParameters.VirtualScreenWidth * 0.8, SystemParameters.VirtualScreenHeight * 0.2); // (LEFT, TOP, RIGHT, BOTTOM)
    }

你好像在问我的行为。请看以下链接:

还可以查看自动翻转属性:


如果这些属性对您没有任何帮助,我很乐意看一看您的示例,请在线上传。

ricardo使用代码编写动画是非常困难的。因此,如果您使用blend制作动画(故事板),效果会更好……我将看一看故事板是如何工作的。谢谢。我会看一下,然后告诉你。我习惯于Java,尽管它与C#非常相似,但我不习惯这种XAML,对如何使用界面布局也不够熟悉。你在问题中标记了C#。但是,请尝试一下,如果您仍然有问题,请告诉我:)我关于C#的问题,但我想说的是,我不习惯它,我只是对Java(我很久以前使用的语言)有经验吗