Как посчитать, сколько раз анимация раскадровки зациклена? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть такой код

    <Storyboard x:Key="AdvMarquee" Completed="Storyboard_Completed">
        <DoubleAnimation Storyboard.TargetProperty="(Canvas.Top)" From="-25"    To="0"      BeginTime="0:00:00" Duration="0:00:01" />
        <DoubleAnimation Storyboard.TargetProperty="(Canvas.Top)" From="0"      To="25"     BeginTime="0:00:03" Duration="0:00:01" />
    </Storyboard>
    <Style x:Key="AnimationImageStyle" TargetType="StackPanel">
        <Setter Property="Canvas.Top" Value="200" />
        <Style.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard Storyboard="{StaticResource AdvMarquee}"/>
            </EventTrigger>
        </Style.Triggers>
    </Style>

И я применил этот стиль анимации с этим кодом

    <Canvas x:Name="Advertise" Background="{x:Null}" Margin="10,0,0,0" >
        <StackPanel Style="{StaticResource AnimationImageStyle}">
            <Button Click="Advertise_Click" Style="{StaticResource AdvertisementBtnStyle}">
                <TextBlock Name="AdvText" Text="This is Animated Text" Padding="10, 0, 10, 0"/>
            </Button>
        </StackPanel>
    </Canvas>

Я пытался использовать Завершенное событие на раскадровке, чтобы вычислить, сколько раз раскадровкаанимация выполнена.

До этого я пытался добавить RepeatBehavior = "Forever" на раскадровку, но он просто зацикливался навсегда и не запускал завершенное событие.

и теперь, когда я удаляю RepeatBehavior =«Навсегда», он завершает свой прогресс, считает, но он не запускается снова.

как я могу решить эту проблему?

до сих пор понятия не имею, потому что я действительно новичокработать с xaml wpfform.

Мой Storyboard_Completed так же, как это.

int count = 0;
private void Storyboard_Completed( object sender, EventArgs e )
{
    count++;
}

1 Ответ

0 голосов
/ 18 октября 2018

Установите обработчик события на CurrentStateInvalidated для последней анимации, и у вас будет возможность получить текущую итерацию:

<DoubleAnimation Storyboard.TargetProperty="(Canvas.Top)" From="0"      To="25"     BeginTime="0:00:03" Duration="0:00:01" CurrentStateInvalidated="DoubleAnimation_CurrentStateInvalidated"/>

int cnt=0;    
private void DoubleAnimation_CurrentStateInvalidated(object sender, EventArgs e)
{
    var ac = sender as AnimationClock;
    cnt = (ac.Parent as ClockGroup).CurrentIteration;
}

Storyboard_Completed вам не понадобится.

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