如何绑定到WPF ColorAnimation中的颜色?

Dav*_*vid 5 data-binding wpf resources colors coloranimation

我想做一些看似很简单的事情,但我无法弄明白该怎么做.我有一个在MouseEnter事件发生时触发的ColorAnimation.它只是将边框的背景颜色从一种颜色更改为另一种颜色.

不幸的是,我无法弄清楚如何将任何硬编码颜色放入此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>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

或者像这样:

<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>
Run Code Online (Sandbox Code Playgroud)

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

第二个例子的例外基本上告诉我它"无法冻结这个Storyboard时间轴树以供跨线程使用"...所以听起来像ColorAnimation试图在除UI线程之外的其他一些线程中做这个绑定?无论它想做什么......它都无法正常工作.

我怎么能做这么简单的任务呢?

Jul*_*ain 7

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

<Color x:Key="MyColor">#FF00FF00</Color>
Run Code Online (Sandbox Code Playgroud)

但是,这并不能解决您的问题:您无法绑定到动画属性,因为这些属性需要冻结(不可更改)才能使动画生效.尝试删除对绑定的依赖,或者在颜色更改时使用正确的颜色重新创建故事板.