Silverlight滚动文字&最大宽度问题

时间:2010-08-28 00:32:53

标签: silverlight silverlight-4.0

我正在尝试在屏幕上滚动文字,效果很好。

更新:我仍然遇到问题,现在可以在我的直播应用上展示:

  1. 转到 http://www.pokerdiy.com/poker-blinds-timer.aspx 并保持非全屏。
  2. 点击顶部的“计时器”标签。 然后单击“Start Tourney”。在 顶部,滚动消息将 出现在右边。在我的显示器上 (22英寸) - 这在它之前切断了 已经完成了这句话。
  3. 然后右键单击以调整大小 屏幕,并重新启动比赛和 然后再次启动它以显示相同的内容 信息。你现在就会看到它 作品!
  4. 这是一个很大的问题,因为我想在顶部滚动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());
    

1 个答案:

答案 0 :(得分:2)

第1部分:如果您打算以像素为基础     动画,使用画布作为     父对象。网格可以工作,但在第2部分(下面)中查看问题的原因

第2部分:基本上是截断你的     文本是由父级引起的     容器裁剪孩子。这个     正在发生的基于宽度     父和它忽略了偏移量     你的文字。

解决方案:

  • 如果将TextBlock作为子项放置 一个画布,而不是一个网格(甚至只是网格中画布内的TextBlock),它将呈现 作为画布的全长默认情况下永远不会剪辑其子项。

  • 您可能需要添加剪辑矩形 在画布上隐藏任何部分 扩展到您所在位置的文本 不想看到它,但这将取决于屏幕上的其他组件隐藏重叠。 如果您确实添加了一个剪辑矩形,请确保使用Canvas.Left而不是TranslateX为文本位置设置动画,否则您可能会再次遇到原始问题!