如果鼠标位于Button
之上,我想为Background
Button
设置动画。
Button
' Background
绑定到我在UserControl
... Background="{Binding BGColor, Elementname="QButton"}"
现在,如果我尝试使用
为Button的背景设置动画<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation To="LightBlue"
Duration="0:0:2"
Storyboard.TargetProperty="Background.Color"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
我得到一个例外:
无法为不可变属性(或类似属性)设置动画。
如何解决此问题?
答案 0 :(得分:3)
基于 Mike Hillberg 关于Easing Cheatsheet的精彩文章:
作为一种变通方法,您可以更新绑定以制作该画笔的副本
LeanTween.moveY (menuPanel, 1200f, 0.5f) .setEase (LeanTweenType.easeInOutBack);
。这不会干扰绑定 - 任何改变 窗口的前景仍将传播到Button
- 但是Button
将为本地动画制作自己的副本。
所以你的完整解决方案应该是这样的:
Button
对于看起来像这样的绑定,引用了<Window x:Class="WpfApplication2.Window3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:WpfApplication1"
....
....
Background="{Binding BGColor, Converter={x:Static local:MyCloneConverter.Instance}}"
:
IValueConverter
答案 1 :(得分:0)
更改DP(BGColor)本身以更改背景。
<Button.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ColorAnimation To="Red"
Duration="0:0:2"
Storyboard.TargetName="QButton"
Storyboard.TargetProperty="(BGColor).(SolidColorBrush.Color)"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>