C#WPF停止故事板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#WPF停止故事板相关的知识,希望对你有一定的参考价值。

即时通讯编程老虎机。为了旋转车轮,我有以下动画,如下所示:

        <Border Height="300" Margin="68,434,1506,335">
                <Border.Triggers>
                    <EventTrigger RoutedEvent="Loaded">
                        <BeginStoryboard >
                            <Storyboard Name="stb">
                                <RectAnimation Storyboard.TargetProperty="Background.(ImageBrush.Viewport)"
                                To="0,0,1,1" RepeatBehavior="Forever" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>

                </Border.Triggers>
        <Border.Background>
            <VisualBrush TileMode="Tile" Viewport="0,1,1,1">
                <VisualBrush.Visual>
                    <StackPanel>
                        <Image Source="test.jpg"></Image>
                        <Image Source="test.jpg"></Image>
                        <Image Source="test.jpg"></Image>
                    </StackPanel>
                </VisualBrush.Visual>
            </VisualBrush>
        </Border.Background>
    </Border>
    <Button Name="cmdStop"/>

如何从Code启动/停止?谢谢你的帮助。

编辑

我想用它来启动/停止按钮而不是在加载页面时。我怎么能解决这个问题?问题是按钮应该在边框之外...我如何访问按钮?

答案

你试过暂停动画吗?

一个很好的例子是here,当你想从Code-Behind暂停它时,使用DataTriggerinstead of EventTrigger

也许你对“故事板的速度三倍”感兴趣。


编辑你的问题“我想用一个按钮启动/停止,而不是在加载页面时。我该如何解决这个问题?”无法回答,因为当未加载页面(边框?)时,动画无法运行。我建议隐藏页面/边框,仅在动画暂停时使其可见。

我摆弄了一下,试图用Visibility解决它

    <!-- This Border is animated. -->
    <Border Height="300" Margin="68,434,1506,335" >
        <Border.Style>
            <Style TargetType="{x:Type Border}">
                <!-- Here is your animation -->
                <Style.Triggers>
                    <EventTrigger RoutedEvent="Border.Loaded">
                        <BeginStoryboard Name="RandomStoryboard">
                            <Storyboard >
                                <RectAnimation Storyboard.TargetProperty="Background.(ImageBrush.Viewport)"
                            To="0,0,1,1" RepeatBehavior="Forever" />
                            </Storyboard>
                        </BeginStoryboard>
                        <!-- Stop the animation at the Start -->
                        <PauseStoryboard BeginStoryboardName="RandomStoryboard" />
                    </EventTrigger>
                    <!-- Control the animation according to the Togglebutton State -->
                    <DataTrigger Binding="{Binding Path=IsChecked, ElementName=SpinControl}" Value="True">
                        <DataTrigger.EnterActions>
                            <ResumeStoryboard BeginStoryboardName="RandomStoryboard" />
                        </DataTrigger.EnterActions>
                        <DataTrigger.ExitActions>
                            <PauseStoryboard BeginStoryboardName="RandomStoryboard" />
                        </DataTrigger.ExitActions>
                        <!-- Hide the Border while the animation is running -->
                        <Setter Property="Border.Visibility" Value="Hidden"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
    </Border>

    <!-- This Button Controls the Animated Border -->
    <ToggleButton Name="SpinControl">
            <ToggleButton.Style>
                <Style TargetType="{x:Type ToggleButton}">
                    <Setter Property="Content" Value="Start"/>
                    <Style.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Content" Value="Stop"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ToggleButton.Style>
        </ToggleButton>

注意:StyleToggleButton部分是可选的,它只将Content从Start更改为Stop(反之亦然)。

注意2:不要忘记在边框中插入qazxsw poi,否则无法识别动画。

另一答案

通常,您可以使用storyboard对象的start和stop方法来启动/停止故事板。

在你的例子中应该是stb.Start()或stb.Stop()

以上是关于C#WPF停止故事板的主要内容,如果未能解决你的问题,请参考以下文章

向“切换”发送垃圾邮件时,C#/WPF 处理活动的故事板动画

WPF - 无法停止动画 StoryBoard,IsControllable 不起作用?

在WPF中,有没有办法在后面的代码中获取故事板动画值的当前值?

故事板 EllipseGeometry 动画

如何允许完整的 WPF 故事板动画

从 XAML 到 C# 的 WPF 故事板