使动画在禁用的控件上工作

时间:2012-04-03 10:52:44

标签: .net wpf animation storyboard disabled-control

我正在使用动画来更改控件的背景和前景色,只要它的值发生变化;除了禁用的控件之外,它工作正常。这是我正在使用的动画

<Storyboard
    x:Key="Anim"
    AutoReverse="True"
    Duration="500"
    FillBehavior="Stop">
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background">
        <DiscreteObjectKeyFrame KeyTime="0:0:0.002">
            <DiscreteObjectKeyFrame.Value>
                <SolidColorBrush Color="Red" />
            </DiscreteObjectKeyFrame.Value>
        </DiscreteObjectKeyFrame>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground">
        <DiscreteObjectKeyFrame KeyTime="0:0:0.002">
            <DiscreteObjectKeyFrame.Value>
                <SolidColorBrush Color="White" />
            </DiscreteObjectKeyFrame.Value>
        </DiscreteObjectKeyFrame>
    </ObjectAnimationUsingKeyFrames>
</Storyboard>

我在运行时设置此动画的目标 -

Storyboard anim = this.FindResource("Anim") as Storyboard;
if (anim != null)
{
    anim.SetValue(Storyboard.TargetProperty, animationTarget);
}

每当价值发生变化时

_animation.Begin();

请注意,目标控制可以是不同类型,例如TextBox,DropDown,CheckBox等,可以根据ViewModel属性启用或禁用。

如何让这个动画适用于禁用的控件?

2 个答案:

答案 0 :(得分:1)

我认为它对禁用控件不起作用的原因是,在控件的样式内,当它处于禁用的可视状态时,有一个RectangleBorder显示并覆盖Background面板。

您可能需要创建附加属性(例如DisabledBackground)并使用TemplateBinding将其绑定到已禁用面板的Background。然后,您只需要将此DisabledBackground属性设置为透明颜色。

答案 1 :(得分:0)

我使用BooleanAnimationUsingKeyFrames以相当简单的方式解决了问题。我将BooleanAnimationUsingKeyFrames添加到我的动画中,因此当应用此动画时,控件将在短时间间隔内启用,动画运行并再次禁用控件。

在此处发表博文 - Making animations work for disabled controls