Вернуть элемент в завершенное событие после раскадровки.Begin(элемент)

#c# #wpf #storyboard

#c# #wpf #раскадровка

Вопрос:

Должно быть что-то очень простое, но мне уже требуется десятки минут для решения. Вот почему спрашиваю.

     // start animation like this
    var storyboard = new Storyboard();
    ...
    storyboard.Completed  = storyboard_Completed;
    storyboard.Begin(control); // << "control"


static void storyboard_Completed(object sender, EventArgs e)
{
    var storyboard = sender as Storyboard;
    ...
    // how to get "control" here?
}
  

Я могу использовать свойства или, возможно, создать что-то вроде Tag для раскадровки (прикрепленное свойство?). Но это просто не может быть настолько сложным для такой очевидной задачи.

Ответ №1:

Completed Событие наследуется от Timeline.Completed события. Вы можете видеть, что он использует стандартный EventArgs объект, поэтому очевидно, что ему негде хранить ссылку на любой элемент управления, который может использоваться в Animation .

Самый простой способ получить ссылку на элемент управления, к которому вы применили свой, Animation — это определить закрытую переменную-член в вашем классе:

 private UIElement animatedContol = null;
  

 // start animation like this
var storyboard = new Storyboard();
...
storyboard.Completed  = storyboard_Completed;
storyboard.Begin(control); 
animatedContol = control;
  

 static void storyboard_Completed(object sender, EventArgs e)
{
    var storyboard = sender as Storyboard;
    ...
    // do something with animatedContol here
}
  

Комментарии:

1. Анимация применяется к элементу управления внутри пользовательского элемента управления. Проблема заключалась static в методе (нет this ), но после вашей ссылки на элемент управления, к которому вы применили анимацию , стало очевидно: создание нестатического метода, чтобы обработчик событий тоже стал нестатическим, и я имею this в своем распоряжении. Спасибо.

2. И что произойдет, если вы запустите его более одного раза, не дожидаясь, с разными элементами управления в качестве параметров? мне действительно не нравится, как реализованы эти раскадровки.