0

每当控件的值更改时,我正在使用动画来更改控件的背景和前景色;除了禁用的控件外,它工作正常。这是我正在使用的动画

<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 属性启用或禁用。

如何使此动画适用于禁用的控件?

4

2 回答 2

1

我猜它对禁用控件不起作用的原因是,在控件的样式内部,当它处于禁用的视觉状态时,会出现 aRectangle或 aBorder并覆盖Background面板。

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

于 2012-04-03T11:01:41.827 回答
0

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

在这里写博客 -使动画适用于禁用的控件

于 2012-06-13T12:08:40.283 回答