WPF:我可以在代码中动画Grid.Background吗?

时间:2013-01-16 03:46:41

标签: c# wpf

我的代码是这样的。 我想动态创建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]);
        }

2 个答案:

答案 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);