C # WPF Stop Раскадровка - PullRequest
       10

C # WPF Stop Раскадровка

0 голосов
/ 31 августа 2018

Я при программировании игрового автомата. Для вращения колеса у меня есть следующая анимация, которая выглядит так:

        <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"/>

Как я могу начать / остановить код позади? Спасибо за вашу помощь.

EDIT

Я хочу, чтобы он запускался / останавливался кнопкой, а не когда страница загружена. как я могу решить это? Проблема в том, что кнопка должна быть за пределами границы ... Как я могу получить доступ к кнопке?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы пытались приостановить анимацию?

Хороший пример найден здесь , и когда вы хотите приостановить его из-за кода, используйте DataTrigger вместо 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>

Примечание. Секция Style в ToggleButton является необязательной, она изменяет только Content со старта на стоп (и наоборот).

Примечание 2: Не забудьте вставить VisualBrush в рамку, иначе анимация не будет распознана.

0 голосов
/ 31 августа 2018

Как правило, вы можете запускать / останавливать раскадровку с помощью метода запуска и остановки объекта раскадровки.

В вашем примере должно быть stb.Start () или stb.Stop ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...