【问题标题】:WPF Storyboarded Animation Freezes If Clicked Too Quickly如果单击太快,WPF 故事板动画会冻结
【发布时间】:2015-02-06 10:15:24
【问题描述】:

我目前对下面的简单 XAML 代码有一个烦人的问题。动画确实正确触发,并且如果我在动画完成后单击按钮,它将始终正确触发。如果我快速点击几下,动画将冻结,动画将永远不会再次运行。

非常感谢您的帮助!

<!-- Admin Login Button /-->
    <ToggleButton Name="LoginButton" IsChecked="{Binding ElementName=LoginPopup, Path=IsOpen, Mode=TwoWay}" HorizontalAlignment="Right" Margin="0,35,32.334,0" VerticalAlignment="Top" Width="97" Height="77" BorderThickness="0" Grid.Column="1" Grid.ColumnSpan="2">
        <ToggleButton.Background>
            <ImageBrush ImageSource="/Resources/Images;component/Resources/titleAboutIcon.png"/>
        </ToggleButton.Background>
        <!--  <Frame x:Name="AdminFrame" Height="77" Width="97"/> /-->
        <ToggleButton.RenderTransform>
            <ScaleTransform x:Name="Buttonscale" ScaleX="1" ScaleY="1" CenterX="0" CenterY="{Binding ElementName=LoginButton, Path=ActualHeight}" />
        </ToggleButton.RenderTransform>
        <ToggleButton.Triggers>
            <EventTrigger RoutedEvent="Button.Click">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="Buttonscale" Storyboard.TargetProperty="(ScaleTransform.ScaleX)" To="1.25" Duration="0:0:0.25" AutoReverse="True"/>
                        <DoubleAnimation Storyboard.TargetName="Buttonscale" Storyboard.TargetProperty="(ScaleTransform.ScaleY)" To="1.25" Duration="0:0:0.25" AutoReverse="True"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </ToggleButton.Triggers>
    </ToggleButton>
    <!-- Admin Login Button /-->

【问题讨论】:

    标签: c# wpf xaml animation


    【解决方案1】:

    您可以将 FillBehavior="Stop" 添加到情节提要中,这样它就会停止并重置动画属性值而不是冻结它们(HoldEnd 是 FillBehavior 的默认值,因此它不会将值更改回默认值)。

    来自 MSDN:

    如果您希望动画在其活动周期结束后保持其值,请将动画 FillBehavior 属性设置为 HoldEnd。已达到其活动周期结束且其 FillBehavior 设置为 HoldEnd 的动画被称为处于其填充周期。当您不希望动画在其活动期结束后保持其值时,请将其设置为 FillBehavior 属性停止。

    https://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.fillbehavior(v=vs.110).aspx

    【讨论】:

    • 非常感谢!它仍然会冻结一会儿,但至少它确实会恢复到原始状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2016-07-02
    • 2018-12-22
    • 2013-01-25
    • 2012-02-21
    • 2017-06-05
    • 2018-02-09
    相关资源
    最近更新 更多