Как сделать зацикленное TranslateTransform? - PullRequest
1 голос
/ 24 февраля 2011

У меня есть прокручиваемая текстовая строка, и мне нужно добиться эффекта, чтобы сразу после конца текста появилось начало того же текста. Есть идеи?

Текст UPD является статическим (не изменяется) Текущий код анимации выглядит так:

                    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                    <BeginStoryboard>
                        <Storyboard RepeatBehavior="Forever">
                            <DoubleAnimation From="200" To="-200" Storyboard.TargetName="translate" 
                                Storyboard.TargetProperty="Y" Duration="0:0:5" />
                        </Storyboard>
                    </BeginStoryboard>

Работает нормально, но дергается, когда достигает конца (и возвращается к началу). Мне нужно этого избегать.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Если длина текста статическая, самый простой способ сделать это - создать несколько копий текста за кадром и анимировать копии / копии в том же положении, что и оригинал.Если у вас есть анимационный цикл таким образом, не будет никакого «рывка»

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
x:Class="SilverlightApplication3.MainPage"
Width="200" Height="480">
<UserControl.Resources>
    <Storyboard x:Name="TextScrollStoryboard">
        <DoubleAnimationUsingKeyFrames  Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="offscreenTextBlock" RepeatBehavior="Forever">
            <EasingDoubleKeyFrame KeyTime="0" Value="-200"/>
            <EasingDoubleKeyFrame KeyTime="0:0:2" Value="0"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="textBlock" RepeatBehavior="Forever">
            <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
            <EasingDoubleKeyFrame KeyTime="0:0:2" Value="200"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</UserControl.Resources>

<i:Interaction.Triggers>
    <i:EventTrigger>
        <ei:ControlStoryboardAction Storyboard="{StaticResource TextScrollStoryboard}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

<Grid x:Name="LayoutRoot" Background="#FFBBBBBB">
    <TextBlock x:Name="textBlock" Text="This is some text" RenderTransformOrigin="0.5,0.5" >
        <TextBlock.RenderTransform>
            <CompositeTransform TranslateX="0"/>
        </TextBlock.RenderTransform>
    </TextBlock>
    <TextBlock x:Name="offscreenTextBlock" Text="This is some text" RenderTransformOrigin="0.5,0.5" >
        <TextBlock.RenderTransform>
            <CompositeTransform TranslateX="-200"/>
        </TextBlock.RenderTransform>
    </TextBlock>
</Grid>

1 голос
/ 24 февраля 2011

Проверьте свойство "RepeatCount" (если память мне не изменяет), вы можете установить его в бесконечность.

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