正确使用多个组件的背景颜色资源

Use a backgroundcolor resource for multiple Components correctly

我创建了一个资源文件,我想在其中保存我的应用程序的所有颜色,以便我以后可以更改它们,如果我的老板决定了他想要的颜色。

我的问题在于将此方法与我的 ComboboxToggleButton 的控件模板的使用相结合。准确地说:如果我将鼠标悬停在组合框上,它应该改变其背景部分,即 GradientBrush。
当前代码(在 ComboBoxToggleButton 的 VisualstateManager 中)如下所示:

<VisualState x:Name="MouseOver">
   <Storyboard>
        <ColorAnimationUsingKeyFrames
           Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)"
           Storyboard.TargetName="Border">
            <EasingColorKeyFrame KeyTime="0" Value="{StaticResource Highlighted_Color}" />
        </ColorAnimationUsingKeyFrames>
   </Storyboard>
</VisualState>

问题在于此解决方案更改了所有使用相同 GradientBrush 作为背景的控件的颜色,而不仅仅是鼠标悬停在其上的控件的颜色。

我怎样才能最轻松地解决这个问题?

我尝试用 Combobox 中的触发器替换 ToggleButton 的 Visual States 部分,但没有效果。
在最坏的情况下,我可以回到在每个控件中直接嵌入 GradientBrush 的版本,而不是通过我的 ColorsAndBrushes 文件中的资源,但如果我想稍后更改颜色,那将是相当难看的。

当您定义诸如 GradientBrush 之类的东西时,WPF 会提供该对象的一个​​实例,该实例由引用它的所有 UI 控件共享。实际上它是一个 "singleton",因此当动画应用于 GradientBrush 时,您将同时在所有其他控件中看到效果。

尝试将 x:Shared="False" 添加到渐变画笔。这将确保每个使用 GradientBrush 资源的控件都有自己的实例。