5

我想做一些看似很简单的事情,但我不知道该怎么做。我有一个在 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>

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

<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>

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

第二个示例的异常基本上告诉我它“无法冻结此 Storyboard 时间线树以供跨线程使用”......所以听起来 ColorAnimation 正在尝试在 UI 线程或其他线程之外的其他线程中执行此绑定?无论它试图做什么......它都不起作用。

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

4

1 回答 1

7

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

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

但是,这并不能解决您的问题:您无法绑定到动画属性,因为这些属性需要被冻结(不可更改)才能使动画正常工作。要么尝试消除对绑定的依赖,要么在颜色发生变化时从后面的代码中重新创建具有正确颜色的情节提要。

于 2010-06-07T21:43:59.030 回答