使用 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();
}
我想将文本块从屏幕左侧移动到屏幕末尾。我做了如下。它从右端向左滑动。但对于冗长的文本,它不会显示所有文本。我该如何解决?
<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();
}