WPF: предотвращение запуска события «Completed» после удаления анимации - PullRequest
1 голос
/ 24 февраля 2010

Как я могу удалить работающую анимацию из элемента WPF таким образом, чтобы его событие Completed не сработало?

Представленные решения здесь и здесь удаляют видимые эффекты анимации, но событие Completed по-прежнему срабатывает в момент завершения анимации.

Вот код, демонстрирующий мою проблему (он находится в коде окна с меткой, кнопкой и TextBox):

    int _count = 0;

    private void button1_Click(object sender, RoutedEventArgs e) {
        myLabel.Content = "Starting animation: " + _count++;

        // Cancel any already-running animations and return
        // the label opacity to 1.0.
        myLabel.BeginAnimation(Label.OpacityProperty, null);
        myLabel.Opacity = 1.0;

        // Create a new animation to fade out the label.
        DoubleAnimation opacityAnim = new DoubleAnimation(1.0, 0.0, TimeSpan.FromSeconds(2), FillBehavior.Stop) {
            BeginTime = TimeSpan.FromSeconds(3)
        };
        opacityAnim.Completed += (sndr, ev) => {
            myTextbox.Text += Environment.NewLine + "Completed fired.";
        };

        // Start the countdown/animation.
        myLabel.BeginAnimation(Label.OpacityProperty, opacityAnim);
    }

Как удалить анимацию, чтобы она не вызывала событие Completed?

1 Ответ

3 голосов
/ 24 февраля 2010

Отписаться от события Completed ... Это также означает, что вам нужно переписать обработчик события Completed из лямбды в явный метод:

   DoubleAnimation _opacityAnim; // Created somewhere else.

   private void button1_Click(object sender, RoutedEventArgs e) 
   {
    myLabel.Content = "Starting animation: " + _count++;

    // Cancel any already-running animations and return
    // the label opacity to 1.0.
    _opacityAnim.Completed -= AnimationCompleted;

    myLabel.BeginAnimation(Label.OpacityProperty, null);
    myLabel.Opacity = 1.0;

    // Create a new animation to fade out the label.
    opacityAnim.Completed += AnimationCompleted;

    // Start the countdown/animation.
    myLabel.BeginAnimation(Label.OpacityProperty, opacityAnim);
}

 private void AnimationCompleted(object sender, EventArgs e)
 {
        myTextbox.Text += Environment.NewLine + "Completed fired.";
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...