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

Moving textblock using StoryBoard - UWP c#

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

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

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

如果您向文本框添加文本换行,文本将在元素末尾换行,这样您就可以看到这些尺寸

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

通过以编程方式设置 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();
    }