我正在使用动画来更改控件的背景和前景色,只要它的值发生变化;除了禁用的控件之外,它工作正常。这是我正在使用的动画
<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属性启用或禁用。
如何让这个动画适用于禁用的控件?
答案 0 :(得分:1)
我认为它对禁用控件不起作用的原因是,在控件的样式内,当它处于禁用的可视状态时,有一个Rectangle
或Border
显示并覆盖Background
面板。
您可能需要创建附加属性(例如DisabledBackground
)并使用TemplateBinding
将其绑定到已禁用面板的Background
。然后,您只需要将此DisabledBackground
属性设置为透明颜色。
答案 1 :(得分:0)
我使用BooleanAnimationUsingKeyFrames以相当简单的方式解决了问题。我将BooleanAnimationUsingKeyFrames添加到我的动画中,因此当应用此动画时,控件将在短时间间隔内启用,动画运行并再次禁用控件。