从BeginAnimation获取DoubleAnimation参考对象

时间:2013-06-29 01:51:46

标签: wpf animation code-behind beginanimations

我想添加一个带有代码隐藏的简单双动画,将fadein应用于在运行时创建的n个对象:

foreach (var rect in howmanyrect) {

   Rectangle bbox = new Rectangle {
       Width = rect.Width, 
       Height = rect.Height, 
       Stroke = Brushes.BlueViolet,
       Opacity = 0D 
   };

   DoubleAnimation da = new DoubleAnimation {
        From = 0D,
        To = 1D,
        Duration = TimeSpan.FromMilliseconds(500D),
        RepeatBehavior = new RepeatBehavior(1),
        AutoReverse = false
   };

GridContainer.Children.Add(bbox);
Canvas.SetLeft(bbox, rect.Left);
Canvas.SetTop(bbox, rect.Top);

bbox.Tag = da; // <- Look HERE
bbox.BeginAnimation(OpacityProperty, da);

此后,在请求时,使用fadeout删除对象集合:

foreach (var child in GridContainer.Children) {

    Rectangle bbox = (Rectangle) child;

    DoubleAnimation da = (DoubleAnimation) bbox.Tag; // <- Look HERE
    da.From = 1D;
    da.To = 0D;

    var childCopy = child; // This copy grants the object reference access for removing inside a forech statement
    da.Completed += (obj, arg) => viewerGrid.Children.Remove((UIElement) childCopy);

    bbox.BeginAnimation(OpacityProperty, da);

}

此代码完美无缺,但这是一种解决方法。在我的第一个修订版中,我在delete方法中创建了一个新的Doubleanimation对象,但是当我启动动画时,每个对象都会在删除之前超过第一个和第二个动画。 所以我决定使用Tag属性传递对DoubleAnimation实例的引用,并更改动画属性。

是否有其他方法可以获取对BeginAnimation附加的DoubleAnimation对象的引用或避免重复第一个动画?

由于 LOX

0 个答案:

没有答案