我的代码是这样的。 我想动态创建Grid。 创造是成功的,但我不能为它的颜色设置动画。 我的错是什么?
Grid[] grid = new Grid[99];
for (int i = 0; i < 10; i++) {
grid[i] = new Grid();
grid[i].Width = grid[i].Height = 100;
grid[i].Background = Brushes.WhiteSmoke;
Storyboard sb = new Storyboard();
ColorAnimation ca = new ColorAnimation(Colors.DarkTurquoise, TimeSpan.FromMilliseconds(250));
Storyboard.SetTarget(ca, grid[i]);
Storyboard.SetTargetProperty(ca, new PropertyPath("Fill.Color"));
sb.Children.Add(ca);
grid[i].MouseEnter += delegate(object sender2, MouseEventArgs e2) {
sb.Begin(this);
};
stackMain.Children.Add(grid[i]);
}
答案 0 :(得分:3)
WPF Grid
没有Fill
属性,您必须使用Background
Storyboard.SetTargetProperty(ca, new PropertyPath("Background.Color"));
答案 1 :(得分:1)
除了sa_ddam所说的内容之外,您还必须创建一个Brush,因为内置画笔(例如示例中的Brushes.WhiteSmoke
)无法设置动画。
grid[i].Background = new SolidColorBrush(Colors.WhiteSmoke);
...
Storyboard.SetTargetProperty(ca, new PropertyPath("Background.Color"));
如果省略故事板并直接运行动画,它也可能会保存一些代码:
var brush = new SolidColorBrush(Colors.WhiteSmoke);
grid[i].Background = brush;
var ca = new ColorAnimation(Colors.DarkTurquoise, TimeSpan.FromMilliseconds(250));
grid[i].MouseEnter +=
(o, e) => brush.BeginAnimation(SolidColorBrush.ColorProperty, ca);