【问题标题】:WPF moving animation and staying thereWPF 移动动画并停留在那里
【发布时间】:2013-12-20 04:11:26
【问题描述】:

我是 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 使用代码编写动画非常困难..所以如果您使用混合制作动画(故事板)会更好..
  • 我来看看故事板是如何工作的。谢谢。

标签: c# wpf animation


【解决方案1】:

您似乎在询问 FillBehavior。看看下面的链接:

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.fillbehavior(v=vs.110).aspx

还可以看看 AutoReverse 属性:

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.autoreverse(v=vs.110).aspx

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

【讨论】:

  • 我会看看他们,让你知道。我习惯了 Java,虽然它与 C# 非常相似,但我不习惯这种 XAML 并且对如何使用界面布局不够熟悉。
  • 您在问题中标记了 c#。但是尝试一下,如果您仍然有问题,请告诉我:)
  • 我的问题是关于 C#,但我说的是我不习惯,我只是在 Java(我很久以前就使用的语言)有经验跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多