我将动画应用到图像的Canvas.BottomProperty,以便在我希望隐藏图像时“卷起”图像。
我正在看动画的已完成事件。处理程序可用的对象是AnimationClock,它具有Timeline,它是Animation本身。
我想知道这个事件触发了哪个Image,即我称之为BeginAnimation的Image。那是不可用的,还是我错过了?
我尝试过的一件事是将动画对象存储在字典中并在Completed事件处理程序中查找。但是,我发现下面作为“时间轴”引用的动画是与BeginAnimation调用中使用的不同的对象。换句话说,返回的动画显然与通过
发送的动画不同animatedImage.BeginAnimation( Canvas.BottomProperty, animation );
(当然,以下代码在调用BeginAnimation之前。)
animation.Completed += ( o, e ) =>
{
var timeline = ( ( AnimationClock ) o ).Timeline;
答案 0 :(得分:1)
您可以定义一个这样的辅助方法:
private static void AnimateProperty(
UIElement element,
DependencyProperty property,
double toValue,
Duration duration,
Action<UIElement> completed)
{
DoubleAnimation a = new DoubleAnimation(toValue, duration);
a.Completed += (o, e) => completed(element);
element.BeginAnimation(property, a);
}
然后像下面这样调用它。在示例中,我在动画完成时将元素设置为不可见。
AnimateProperty(imageElement, Canvas.BottomProperty, -100, TimeSpan.FromSeconds(1),
element => element.Visibility = Visibility.Hidden);