4

从我的代码隐藏我想开始一个特定的动画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);

这是我想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.

    }

任何帮助将不胜感激。

4

1 回答 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.
}
于 2011-04-27T22:24:01.767 回答