我想添加一个带有代码隐藏的简单双动画,以将淡入淡出应用于在运行时创建的 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);
在此之后,当请求时,使用淡出删除对象集合:
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 对象的引用或避免重复第一个动画?
谢谢洛克斯