【问题标题】:Boolean Animation locks property布尔动画锁定属性
【发布时间】:2009-06-02 22:37:06
【问题描述】:

如果我有一个设置属性的 BooleanAnimation,则该属性将被锁定并且无法通过任何其他方式更改。

例子:

<EventTrigger
    SourceName="myButton"
    RoutedEvent="Button.Click">
    <EventTrigger.Actions>
        <BeginStoryboard>
            <Storyboard>
                <BooleanAnimationUsingKeyFrames
                    Storyboard.TargetName="myCheckBox"
                    Storyboard.TargetProperty="IsChecked"
                    FillBehavior="HoldEnd">
                    <DiscreteBooleanKeyFrame
                        KeyTime="00:00:00"
                        Value="False" />
                </BooleanAnimationUsingKeyFrames>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger.Actions>
</EventTrigger>

在此示例中,如果单击按钮,则复选框设置为 false,但是,如果用户尝试再次选中复选框,则复选框无响应。 IsChecked 属性也不能通过代码设置(在单击按钮之后)。

我可以创建另一个动画来更新 CheckBox,但这不是我需要的行为。

我也尝试过 FillBehavior="Stop",但这只会导致动画也不起作用。

【问题讨论】:

    标签: wpf silverlight xaml


    【解决方案1】:

    CheckBox 仍在设置中,但动画仍在运行,这就是它似乎取消选中它的原因。有几种方法可以解决此问题,以便动画不再控制复选框上的属性。 MSDN Animation 概述讨论了动画结束时会发生什么。 how to set a Property after animating it with a Storyboard 还提供了一些其他选项。

    【讨论】:

    • 好的,是的,我看到动画现在是如何工作的。不幸的是,这意味着我无法使用 EventTrigger 设置属性,除非我使用“HoldEnd”锁定该属性。 “如何在使用情节提要对其进行动画处理后设置属性”的链接仅在有可用代码时才有效。对于这个特定的实例,我试图将其保留在 XAML 中,因为它是一个自定义控件。我将创建一个新问题。
    【解决方案2】:

    替换

    FillBehavior="HoldEnd"

    Duration="00:00:01" FillBehavior="Stop"

    它会起作用的:-)

    【讨论】:

    • 这不是(完整的)答案。 Stop 的 FillBehavior 将防止属性被锁定,但也会在动画之前将属性重置为其原始值。有时,您可以通过在情节提要完成时手动设置所需的值来解决此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2018-09-21
    相关资源
    最近更新 更多