wpf - 如何绑定(bind)到 WPF ColorAnimation 中的颜色?

标签 wpf data-binding colors resources coloranimation

我想做一些看似很简单的事情,但我不知道该怎么做。我有一个 ColorAnimation,当 MouseEnter 事件发生时触发。它只是将边框的背景颜色从一种颜色更改为另一种颜色。

不幸的是,我不知道如何将硬编码颜色之外的任何内容放入此 ColorAnimation 中。所以目前看起来像这样:

<Style x:Key="MouseOverStyle">
<Style.Triggers>
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                    To="Red" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</Style.Triggers>
</Style>

但是,我想做这样的事情:

<SolidColorBrush x:Key="MyEventColor" Color="{Binding EventColor}" />

<Style x:Key="MouseOverStyle">
<Style.Triggers>
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                    To="{StaticResource MyEventColor}" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</Style.Triggers>
</Style>

或者像这样:

<Style x:Key="MouseOverStyle">
<Style.Triggers>
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
                                    To="{Binding EventColor}" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</Style.Triggers>
</Style>

当我尝试执行其中任何一个操作时,都会引发异常。对于第一个,它抛出一个异常,本质上告诉我“Color”属性不能采用 SolidColorBrush 值...这是有道理的...但它肯定不会帮助我,因为 ColorAnimation 不会让我这样做为“(Border.Background).(SolidColorBrush)”属性设置动画...它只会让我为“(Border.Background).(SolidColorBrush.Color)”属性设置动画...

第二个示例的异常基本上告诉我,它“无法卡住此 Storyboard 时间线树以便跨线程使用”...所以听起来 ColorAnimation 正在尝试在 UI 线程或其他线程中进行此绑定(bind)某物?无论它想做什么......它都不起作用。

我怎么能完成这么简单的任务?

最佳答案

对于第一个,您可以使用 {StaticResource MyColor} ,其中 MyColor 定义如下:

<Color x:Key="MyColor">#FF00FF00</Color>

但是,这并不能解决您的问题:您无法绑定(bind)到动画属性,因为这些属性需要卡住(不可更改)才能使动画正常工作。尝试消除对绑定(bind)的依赖,或者当颜色发生变化时,使用后面的代码中的正确颜色重新创建 Storyboard。

关于wpf - 如何绑定(bind)到 WPF ColorAnimation 中的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2993270/

相关文章:

java - 将 Color 类中的颜色转换为人类可读的字符串

python - 颜色分类库

ios - 是否可以更改 Apple Map 颜色?

c# - 如何将 MSBuild 与引用网络标准项目的 WPF 项目一起使用

javascript - Knockout - 单击绑定(bind)行为

javascript - 对象文字模式: can't access a data attribute when binding events

javascript - Angular : use a variable into <div>

wpf - 选择 UI 库来创建令人惊叹的 Windows 桌面应用程序

wpf - 您可以将数据绑定(bind)与 WPF 框架的 Content 属性一起使用吗?

c# - 在 UserControl 中绑定(bind)