UserControl动画按钮的背景

时间:2016-01-22 09:39:50

标签: c# wpf animation user-controls dependency-properties

如果鼠标位于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>

我得到一个例外:

  

无法为不可变属性(或类似属性)设置动画。

如何解决此问题?

2 个答案:

答案 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>
相关问题