我想做一些看似很简单的事情,但是我不知道该怎么做。我有一个发生在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>
当我尝试执行任何一个操作时,都会引发异常。首先,它抛出一个异常,告诉我本质上“Color”属性不能采用SolidColorBrush值...这是有道理的...但是它肯定对我没有帮助,因为ColorAnimation不会让我设置“(Border.Background)。(SolidColorBrush)”属性的动画...只会让我设置“(Border.Background)。(SolidColorBrush.Color)”属性的动画...。
第二个示例的异常基本上告诉我,它“无法卡住此Storyboard时间轴树以供跨线程使用” ...所以听起来ColorAnimation试图在UI线程以外的其他线程中进行此绑定(bind)?无论它想做什么...都行不通。
我该怎么做这么简单的任务?
最佳答案
对于第一个,您可以使用带有MyColor的{StaticResource MyColor}
定义如下:
<Color x:Key="MyColor">#FF00FF00</Color>
但是,这不能解决您的问题:您无法绑定(bind)到动画属性,因为这些属性需要卡住(不可更改)才能使动画起作用。尝试消除对绑定(bind)的依赖,或者在颜色更改时从后面的代码中使用正确的颜色重新创建 Storyboard 。