XAML 为什么WPF动画应用于所有相同类型的控件?

643ylb08  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(110)

我目前正在尝试在我的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动画化。

shstlldc

shstlldc1#

这些控件使用一个共享的背景画笔,您可以设置该画笔的“颜色”属性的动画。
将单独的SolidColorBrush分配给每个应设置动画的控件:

<Border x:Name="target">
    <Border.Background>
        <SolidColorBrush Color="White"/>
    </Border.Background>
</Border>

相关问题