Анимация раскадровки - PullRequest
       1

Анимация раскадровки

2 голосов
/ 29 января 2012

Я сделал небольшое приложение WPF для вставки и удаления пользовательских элементов управления, у меня проблема в том, что когда пользовательский элемент управления анимируется для вставки, затем я нажимаю кнопку, чтобы вставить другой элемент управления, они оба выдвигаются - я не уверен почему это?

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

1 Ответ

1 голос
/ 29 января 2012

Вы устанавливаете свойство Name элемента UserControl где-нибудь? Или, если быть более точным, вы даете второму UserControl другое имя, чем первое? Ваша анимация получает цель, установленную

Storyboard.SetTargetName(tAnimation, uc.Name);

так что имена должны быть разными. В качестве альтернативы вы можете позвонить

Storyboard.SetTarget(tAnimation, uc);

для указания цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...