gpt4 book ai didi

wpf - 尝试为 SolidColorBrush 静态资源设置动画

转载 作者:行者123 更新时间:2023-12-01 15:39:39 26 4
gpt4 key购买 nike

我想要什么

我想在多个 UserControl 类型中重复使用某些样式。

我希望一些Border控件的背景闪烁,我希望它们都使用相同的样式、静态资源和动画,以便它们都同步闪烁。


我是如何做到的

为此,我在资源字典中定义了一些常用颜色,如下所示:

<SolidColorBrush x:Key="StatusErrorBackground" Color="#440000" />

...我还在这本词典中定义了一个 StoryBoard,如下所示:

<Storyboard x:Key="BackgroundAnimation">
<ColorAnimation
Storyboard.Target="{StaticResource StatusErrorBackground}"
Storyboard.TargetProperty="Color"
From="#440000"
To="#ff0000"
Duration="0:0:1"
RepeatBehavior="Forever"
AutoReverse="True"/>
</Storyboard>

然后,我将以下内容添加到顶级 UserControl:

<FrameworkElement.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="CommonResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</FrameworkElement.Resources>

<FrameworkElement.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource BackgroundAnimation}"/>
</EventTrigger>
</FrameworkElement.Triggers>

...然后在其子的各种其他 UserControl 中,我重新导入上述 ResourceDictionary 并使用 {StaticResource StatusErrorBackground } 用于 背景

有问题的元素是红色的(就像在 SolidColorBrush 声明中一样),但它们不闪烁


到目前为止的模糊理解

也许这样做不会针对相关元素引发适当的 PropertyChanged 通知,因此它们不会被重绘?或类似的东西。 SolidColorBrush 上的 Color 属性不是依赖属性,但 SolidColorBrush 实现了 IAnimatable,因此显然发生了神奇的事情这里的幕后我不明白。

或者是因为我在两个不同的地方(一次在我的顶级 UserControl 加上一次在我的 child )中导入了相同的资源字典,我最终得到了两个独立的 StaticResource 引用?如果您在两个不同的控件中导入相同的 ResourceDictionary 文件,是否会为每个控件创建独立的资源?在这种情况下,我想我可以通过将其拉入应用程序级别来解决此问题...

谁能告诉我我做错了什么以及如何解决它?

最佳答案

我知道我来晚了,但是当我尝试在实心画笔中保持颜色进行动画处理时,我发现了这个问题。画笔是其他人正在使用的资源字典的一部分,我不想更改。我刚做了这个,很快就尝试了,它似乎有效。

public class SolidColorAnimation : ColorAnimation
{
public SolidColorBrush ToBrush
{
get { return To == null ? null : new SolidColorBrush(To.Value); }
set { To = value?.Color; }
}
}

并像这样在 xaml 中使用它:

        <Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard >
<ui:SolidColorAnimation Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" ToBrush="{StaticResource NavButtonRolloverBrush}" Duration="0:0:0.75"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard >
<ui:SolidColorAnimation Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" ToBrush="{StaticResource NavButtonBrush}" Duration="0:0:0.25"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>

关于wpf - 尝试为 SolidColorBrush 静态资源设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com