4

动画很好,但有时我只想立即更改属性的值,而不需要任何动画。显然,这样做的唯一方法是使用 a <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>

(我知道这段代码是无效的,这只是为了举例说明我想要什么)


编辑:只是为了说清楚:我知道Triggersand DataTriggers,但它们不是我需要的,因为它们只能用于样式和控件模板中。我正在使用VisualStateManagerin a UserControl,所以我被迫使用 a Storyboard

4

2 回答 2

1

如果您正在设置的属性类型存在非关键帧动画(并且有一大堆非关键帧动画类型),则可以使用持续时间为 0 的动画。这具有在 xaml 的一行中充当二传手。例如:

<Storyboard>
    <ColorAnimation Storyboard.TargetName="txtStatus" Storyboard.TargetProperty="Foreground" Value="Red" Duration="0" />
</Storyboard>

这是因为动画的默认 FillBehavior 是 HoldEnd。

这与出现“Setter”一词并不完全相同——浏览 xaml 需要一些解释才能意识到动画具有瞬时设置的效果。此外,故事板结束时该值将恢复,但这确实符合立即更改值的要求。

于 2012-09-05T22:52:27.193 回答
0

您必须设置触发器(您可能已经必须调用情节提要。而不是用设置器填充它们BeginStoryboardStoryboard项目。

<Trigger Property="<SomeProperty>" Value="<SomeValue>">
   <Setter TargetName="txtStatus" Property="Foreground" Value="Red" />
</Trigger>
于 2012-08-23T11:18:20.457 回答