如何绑定到 WPF 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)”属性进行动画处理...
第二个示例的异常基本上说明了我说它“无法冻结这个情节提要时间线树以便跨线程使用”...所以听起来 ColorAnimation 正在尝试在 UI 线程或其他线程之外的其他线程中进行此绑定?无论它试图做什么......它都不起作用。
我到底怎样才能完成这么简单的任务呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于第一个,您可以使用
{StaticResource MyColor}
,其中 MyColor 定义如下:但是,这并不能解决您的问题:您无法绑定到动画属性,因为这些属性需要冻结(不可更改)以使动画正常工作。尝试消除对绑定的依赖,或者在颜色更改时从代码后面重新创建具有正确颜色的故事板。
For the first one, you could use
{StaticResource MyColor}
with MyColor defined as such:However, this doesn't solve your problem: you can't bind to animation properties since those properties need to be frozen (unchangeable) for the animation to work. Either try to remove your dependence on a binding, or recreate the storyboard with the correct color from code behind when the color changes.