Получение UIElement из завершенного события анимации - PullRequest
4 голосов
/ 28 апреля 2011

Исходя из моего кода, я хочу запустить анимацию для определенного UIElement, когда эта анимация заканчивается, я бы хотел выполнить некоторую другую обработку для этого UIElement.У меня возникают проблемы с выяснением того, как преобразовать объект AnimationClock, который я получаю в качестве отправителя события Animation Completed, в объект UIElement, для которого была выполнена анимация.

Вот код, который я используюдля создания и запуска анимации:

DoubleAnimation FadeOutAnim = new DoubleAnimation(1, 0, TimeSpan.FromSeconds(.5));
FadeOutAnim.Completed += new EventHandler(FadeOutAnim_Completed);

UIElement element = lstMessages.ItemContainerGenerator.ContainerFromItem(sender) as UIElement;
if(element != null)
   element.BeginAnimation(UIElement.OpacityProperty, FadeOutAnim);

А вот мое событие Completed, где я хочу снова получить доступ к UIElement.

void FadeOutAnim_Completed(object sender, EventArgs e)
    {
        UIElement animation = sender; //This is an AnimationClock and I can't seem to figure out how to get my UIElement back.

    }

Любая помощь будет принята с благодарностью.

1 Ответ

6 голосов
/ 28 апреля 2011

Если обработчик бесполезен (например, я не могу найти способ вернуть анимированный элемент), вы можете просто вызвать другое событие, которое содержит эту информацию:

private event EventHandler FadeAnimationCompleted;
private void OnFadeAnimationCompleted(object sender)
{
    var handler = FadeAnimationCompleted;
    if (handler != null)
        handler(sender, null);
}
FadeAnimationCompleted += new EventHandler(This_FadeAnimationCompleted);
FadeOutAnim.Completed += (s, _) => OnAnimationCompleted(element);
void This_FadeAnimationCompleted(object sender, EventArgs e)
{
    //Sender is the UIElement
}

Еще проще было бы сделать прямой вызов метода в делегате:

FadeOutAnim.Completed += (s, _) => FadeAnimationCompleted(element);
void FadeAnimationCompleted(UIElement element)
{
    //Meaningful code goes here.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...