从动画完成事件中获取UI元素

4

我想从我的代码后台开始在特定的UIElement上执行动画,当动画结束时,我想在该UIElement上进行其他处理。 我有困难弄清如何将我作为动画完成事件的发送方接收到的AnimationClock对象转换为执行动画的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);

以下是我完成事件,我想再次访问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个回答

7
如果处理程序无用(例如,我无法找到一种方法来获取动画元素),那么您可以触发另一个事件,该事件包含所需信息:
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.
}

谢谢,简单而伟大。 - Maria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接