我正在尝试在屏幕上滚动文字,效果很好。
更新:我仍然遇到问题,现在可以在我的直播应用上展示:
这是一个很大的问题,因为我想在顶部滚动LONG消息......有什么想法吗?
问题摘要:
屏幕右侧有一个Textblock,没有设置宽度并绑定到字符串值。我以编程方式启动动画,更改CompositeTransform.TranslateX上的From和To值,以在屏幕上移动整个文本块以呈现滚动的外观。此文本块的宽度自动调整为绑定字符串值,我将其设置为“动画到”值(负数),因此它将其从屏幕左侧移开(请参阅下面的代码)。
所以这一切都很奇妙......但不是长信息。对于截断我的文本的内容似乎存在宽度限制。在某些时候它会以宽度限制将其剪掉(最后一个字符呈现为一半,因此它不是字符限制)。我设置了一个循环来创建一个大字符串并输出Textblock的ActualWidth,它显示为17000(这是正确的)。宽度也很好,实际的Text属性显示完整的字符串......但是UI会在某个点截断它,这是我无法弄清楚的。
所以 - 1)这种方法是否正常(有更简单的方法吗?)和2)导致截断的原因是什么?
谢谢!
的Xaml: -
<Storyboard x:Name="StoryboardScrollText" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)">
<DoubleAnimation x:Name="StoryboardScrollTextAnimation" Storyboard.TargetName="txtSystemMessage" From="500" To="-740" Duration="0:0:30" />
</Storyboard>
<TextBlock x:Name="txtSystemMessage" TextWrapping="NoWrap" Text="{Binding TourneyMessage}" Foreground="White" FontSize="20" VerticalAlignment="Center" >
<TextBlock.RenderTransform>
<CompositeTransform TranslateX="0"/>
</TextBlock.RenderTransform>
</TextBlock>
代码: -
mainPage.StoryboardShowTourneyMessage.Begin();
//has to scroll the whole message off the screen (plus a bit extra as it starts off the screen)
//get the leftmost position of the logo so it starts just behind it
mainPage.StoryboardScrollTextAnimation.From = GetPositionX(mainPage.NavigationGridLogo);
mainPage.StoryboardScrollTextAnimation.To = mainPage.txtSystemMessage.ActualWidth * -1 - 50;
mainPage.StoryboardScrollText.Begin();
MessageBox.Show(mainPage.txtSystemMessage.ActualWidth.ToString() + " " + mainPage.txtSystemMessage.Width.ToString());
答案 0 :(得分:2)
第1部分:如果您打算以像素为基础 动画,使用画布作为 父对象。网格可以工作,但在第2部分(下面)中查看问题的原因
第2部分:基本上是截断你的 文本是由父级引起的 容器裁剪孩子。这个 正在发生的基于宽度 父和它忽略了偏移量 你的文字。
如果将TextBlock作为子项放置 一个画布,而不是一个网格(甚至只是网格中画布内的TextBlock),它将呈现 作为画布的全长默认情况下永远不会剪辑其子项。
您可能需要添加剪辑矩形 在画布上隐藏任何部分 扩展到您所在位置的文本 不想看到它,但这将取决于屏幕上的其他组件隐藏重叠。 如果您确实添加了一个剪辑矩形,请确保使用Canvas.Left而不是TranslateX为文本位置设置动画,否则您可能会再次遇到原始问题!