我目前正在尝试在我的WPF应用程序中动画一些Border
元素。
我需要改变Background
属性,我使用ColorAnimation
类和这个助手方法:
public static void AnimateColor(SolidColorBrush to, Animatable fe)
{
ColorAnimation ca = new()
{
To = to.Color,
Duration = new(TimeSpan.FromSeconds(0.5)),
};
fe.BeginAnimation(SolidColorBrush.ColorProperty, ca);
}
我使用的方法如下:
AnimateColor(new SolidColorBrush(Colors.Red), target.Background);
- target* 是我想要设置动画的控件。
然而,当我运行代码时,相同控件类型的所有示例都是动画的,例如当前窗口中的所有Border
元素都被动画化。
我错过了什么?如何从代码隐藏中为Control的单个示例设置动画?
谢谢你的帮助。
编辑,由接受的答案解决
我更新了我的答案,这样任何被这个“问题”卡住的人都可以通过首先理解WPF如何处理动画来理解它。
正如公认的答案所建议的那样,我为每个边框背景设置了一个初始值,如下所示:
SolidColorBrush initialBackground = new(Colors.White);
border1.Background = initialBackground;
border2.Background = initialBackground;
border3.Background = initialBackground;
我以为动画会在控制上工作,但这是我的错误。现在我明白了WPF ColorAnimation
是在指定给被动画化的DependecyProperty的特定值上工作的,所以在我的例子中,我总是在为同一个示例initialBackground动画化。
1条答案
按热度按时间shstlldc1#
这些控件使用一个共享的背景画笔,您可以设置该画笔的“颜色”属性的动画。
将单独的SolidColorBrush分配给每个应设置动画的控件: