使用StoryBoard移动文本块-UWP C#

时间:2018-08-31 09:40:50

标签: xaml uwp storyboard

我想将文本块从屏幕的左端移到另一端。我已经做了如下。它从右端向左滑动。但是对于冗长的文本,它不会显示所有文本。我该如何解决?

           <Grid>
                <Canvas Grid.Row="0" Background="Blue">
                <Canvas.Clip>
                    <RectangleGeometry Rect="0, 0, 2000, 800" />
                </Canvas.Clip>
            <TextBlock Name="txtScrollingNotification" Foreground="White" 
                   Text="aaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgggggggggggggggggggggggggggggggggggggg hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkklllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooopppppppppppppppppppppppppp" Canvas.Top="6" />
            </Canvas>
      <Grid.Resources>
                <Storyboard x:Name="Storyboard1">
                    <DoubleAnimation
                Storyboard.TargetName="txtScrollingNotification"
                Storyboard.TargetProperty="(Canvas.Left)"
                Duration="0:0:10" From="2000"
                To="0"  
                RepeatBehavior="Forever"  />
                </Storyboard>
            </Grid.Resources>
        </Grid>

2 个答案:

答案 0 :(得分:0)

您可以在动画之前看到所有文本吗?可能是您的元素不够宽,无法显示所有文本。

如果在文本框中添加自动换行,则文本将自动换行到元素的末尾,以便您可以看到这些尺寸

<TextBlock 
   Name="txtScrollingNotification" 
   Foreground="White" 
   Width="2000"
   TextWrapping="Wrap"
   Text="long text" 
   Canvas.Top="6" />

答案 1 :(得分:0)

通过编程设置DoubleAnimation的From和To值解决了该问题

 private void LoadScrollingTextBlock()
    {
        Storyboard sb = new Storyboard();
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = this.ActualWidth;
        doubleAnimation.To = -txtScrollingNotification.ActualWidth;
        doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
        doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(55)); // provide an appropriate  duration 
                                                                           //marquee.(Canvas.LeftProperty, doubleAnimation);
        Storyboard.SetTarget(doubleAnimation, txtScrollingNotification);
        Windows.UI.Xaml.Media.Animation.Storyboard.SetTargetProperty(doubleAnimation, "(Canvas.Left)");
        sb.Children.Add(doubleAnimation);
        sb.Begin();
    }