gpt4 book ai didi

c# - 从动画完成事件中获取 UIElement

转载 作者:太空狗 更新时间:2023-10-30 00:57:13 24 4
gpt4 key购买 nike

在我的代码隐藏中,我想在特定的 UIElement 上启动动画,当该动画结束时,我想在该 UIElement 上进行一些其他处理。我无法弄清楚如何将我作为 Animation Completed 事件的发送者收到的 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.

}

如有任何帮助,我们将不胜感激。

最佳答案

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

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
}

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

FadeOutAnim.Completed += (s, _) => FadeAnimationCompleted(element);
void FadeAnimationCompleted(UIElement element)
{
//Meaningful code goes here.
}

关于c# - 从动画完成事件中获取 UIElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5811023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com