2 Stimmen

Storyboard-Animation

Ich habe eine kleine WPF-Anwendung, um UserControls in und aus zu schieben, das Problem, das ich habe ist, wenn ein UserControl animiert, um in zu schieben, dann klicke ich auf die Schaltfläche, um ein anderes UserControl in zu schieben, Sie beide gleiten aus - ich bin nicht sicher, warum das ist?

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);
}

1voto

Clemens Punkte 118983

Haben Sie die Name-Eigenschaft des UserControls irgendwo festgelegt? Oder, genauer gesagt, geben Sie dem zweiten UserControl einen anderen Namen als dem ersten? Ihre Animationen erhalten ihr Ziel durch

Storyboard.SetTargetName(tAnimation, uc.Name);

daher sollten die Namen unterschiedlich sein. Alternativ können Sie auch

Storyboard.SetTarget(tAnimation, uc);

um das Ziel anzugeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X