动画很不错,但有时我只是想立即更改属性的值,而不需要任何动画。显然,唯一的方法是使用<Something>AnimationUsingKeyFrames
:
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="txtStatus" Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="Red" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
语法很乱...... 7行代码只是为了将属性设置为不同的值?!
有更简单的方法吗?
我希望能够做到这样的事情:
<Storyboard>
<Setter TargetName="txtStatus" Property="Foreground" Value="Red" />
</Storyboard>
(我知道这段代码无效,只是举例说明我想要的内容)
编辑:只是为了说清楚:我知道Triggers
和DataTriggers
,但它们不是我需要的,因为它们只能用在样式和控件模板中。我在VisualStateManager
中使用UserControl
,因此我被迫使用Storyboard
。
答案 0 :(得分:1)
如果您正在设置的属性类型存在非关键帧动画(并且存在大量非关键帧动画类型),则可以使用持续时间为0的动画。像一个二传手和一行xaml一样行动的效果。例如:
<Storyboard>
<ColorAnimation Storyboard.TargetName="txtStatus" Storyboard.TargetProperty="Foreground" Value="Red" Duration="0" />
</Storyboard>
这是有效的,因为动画的默认FillBehavior是HoldEnd。
与出现“Setter”这个词并不完全相同 - 浏览xaml需要一些解释才能意识到动画具有即时设置的效果。此外,当故事板结束时,该值将恢复,但这确实适合立即更改值的帐单。
答案 1 :(得分:0)
你必须设置触发器(你可能已经调用了故事板。而不是用BeginStoryboard
和Storyboard
项填充它们,而是用setter填充它们。
<Trigger Property="<SomeProperty>" Value="<SomeValue>">
<Setter TargetName="txtStatus" Property="Foreground" Value="Red" />
</Trigger>