【问题标题】:Storyboard animation故事板动画
【发布时间】:2012-02-21 16:39:54
【问题描述】:

我制作了一个小型 WPF 应用程序来滑入和滑出 UserControl,我遇到的问题是当一个 UserControl 动画滑入时,然后我单击按钮滑入另一个 UserControl,它们都滑出 - 我不确定这是为什么呢?

public UserControl1()
{
    InitializeComponent();
}

public void SlideIn(UserControl uc)
{
    ThicknessAnimation tAnimation = new ThicknessAnimation();
    tAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.5));
    tAnimation.From = new Thickness(500, 0, -500, 0);
    tAnimation.To = new Thickness(0);
    tAnimation.DecelerationRatio = 0.9;

    Storyboard.SetTargetName(tAnimation, uc.Name);
    Storyboard.SetTargetProperty(tAnimation, new PropertyPath(MarginProperty));

    Storyboard storyboard = new Storyboard();
    storyboard.Children.Add(tAnimation);
    storyboard.Begin(uc);
    this.Content = uc;
}

public void SlideOut(UserControl uc)
{
    ThicknessAnimation tAnimation = new ThicknessAnimation();
    tAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.5));
    tAnimation.To = new Thickness(-500, 0, 500, 0);
    tAnimation.DecelerationRatio = 0.9;

    Storyboard.SetTargetName(tAnimation, uc.Name);
    Storyboard.SetTargetProperty(tAnimation, new PropertyPath(MarginProperty));

    Storyboard storyboard = new Storyboard();
    storyboard.Children.Add(tAnimation);
    storyboard.Begin(this);
}

private void button1_Click(object sender, RoutedEventArgs e)
{
    SlideOut(userControl1);
    UserControl2 uc2 = new UserControl2();
    SlideIn(uc2);
}

【问题讨论】:

  • 我试过storyboard.Begin(uc);,但结果相同。

标签: c# wpf animation storyboard


【解决方案1】:

您是否在某处设置了 UserControl 的 Name 属性?或者更准确地说,您是否给第二个 UserControl 指定了与第一个不同的名称?您的动画的目标设置为

Storyboard.SetTargetName(tAnimation, uc.Name);

所以名称应该不同。或者,您可以致电

Storyboard.SetTarget(tAnimation, uc);

指定目标。

【讨论】:

  • 我在 XAML 中设置了 Name 属性,两个 UserControl 有不同的名称。我刚试过Storyboard.SetTarget(tAnimation, uc);,但还是一样……如果有人有兴趣,我可以上传这个应用程序,如果你想试试?
  • 我上传到了 Dropbox 的 Public 文件夹,应该可供所有人访问 - dl.dropbox.com/u/6727433/MyOwnLibrary.zip
  • 好的,问题出在 UserControl1.xaml.cs 第 32 行中的 this.Content = uc。将第二个 UserControl 设置为第一个的内容会使其与第一个一起移动(滑出)。您应该重组您的应用程序并在 MainWindow 中为这两个控件使用容器(例如 Canvas)。将它们动态添加到 Canvas.Children 并为 Canvas.Left 和/或 Canvas.Top 设置动画。
  • 嗯,好的。我认为您在后一部分中描述的内容如下所示:joeseymour.net/2009/07/wpf-screen-transition.html - 我已经尝试过了。我一直在尝试加载不同的转换库,问题是我正在使用 Kinect 并且我正在使用悬停按钮,在显示几个 UserControls 后这些按钮似乎不起作用,因为大多数库倾向于重叠每个新的用户控件。所以我真的被想法困住了 + 也没有 Kinect 的解决方案。
  • 是的,您所指的示例看起来很像您要实现的目标。再次,关于您在问题中描述的具体问题,最重要的事情是将所有移动控件放在同一个容器中,并在为其位置设置动画之前和之后动态添加和删除它们。如果您使用 Canvas 提供的定位或选择其他方法,例如动画控件的 RenderTransorm 属性。无论如何,如果它对您的问题有帮助,请永远不要忘记接受这个答案。
猜你喜欢
  • 2021-05-05
  • 2020-05-19
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 2017-03-02
相关资源
最近更新 更多