Ter*_*mas 4 c# wpf animation casting uielement
从我的代码隐藏开始,我想在特定的动画上开始动画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);
Run Code Online (Sandbox Code Playgroud)
这是我完成的活动,我希望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.
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
如果处理程序是无用的(我找不到恢复动画元素的方法),你可以只引发另一个包含该信息的事件:
private event EventHandler FadeAnimationCompleted;
private void OnFadeAnimationCompleted(object sender)
{
var handler = FadeAnimationCompleted;
if (handler != null)
handler(sender, null);
}
Run Code Online (Sandbox Code Playgroud)
FadeAnimationCompleted += new EventHandler(This_FadeAnimationCompleted);
FadeOutAnim.Completed += (s, _) => OnAnimationCompleted(element);
Run Code Online (Sandbox Code Playgroud)
void This_FadeAnimationCompleted(object sender, EventArgs e)
{
//Sender is the UIElement
}
Run Code Online (Sandbox Code Playgroud)
更容易的是在委托中进行直接的方法调用:
FadeOutAnim.Completed += (s, _) => FadeAnimationCompleted(element);
Run Code Online (Sandbox Code Playgroud)
void FadeAnimationCompleted(UIElement element)
{
//Meaningful code goes here.
}
Run Code Online (Sandbox Code Playgroud)