Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从动画完成事件获取UIElement_C#_Wpf_Animation_Casting_Uielement - Fatal编程技术网

C# 从动画完成事件获取UIElement

C# 从动画完成事件获取UIElement,c#,wpf,animation,casting,uielement,C#,Wpf,Animation,Casting,Uielement,从我的codebehind开始,我想在一个特定的UIElement上开始一个动画,当动画结束时,我想在该UIElement上进行一些其他处理。我无法确定如何将作为动画完成事件的发送者接收的AnimationClock对象转换为执行动画的UIElement对象 以下是我用于构建和启动动画的代码: DoubleAnimation FadeOutAnim = new DoubleAnimation(1, 0, TimeSpan.FromSeconds(.5)); FadeOutAnim.Complet

从我的codebehind开始,我想在一个特定的
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);
这是我完成的事件,我想再次访问
ui元素

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.

    }
任何帮助都将不胜感激。

如果处理程序没有用处(例如,我无法找到将动画元素取回的方法),您可以引发另一个包含该信息的事件:

private event EventHandler FadeAnimationCompleted;
private void OnFadeAnimationCompleted(object sender)
{
    var handler = FadeAnimationCompleted;
    if (handler != null)
        handler(sender, null);
}

更简单的方法是在委托中进行直接方法调用:

FadeOutAnim.Completed += (s, _) => FadeAnimationCompleted(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.
}