代码之家  ›  专栏  ›  技术社区  ›  Rodney

Silverlight滚动文本和最大宽度问题

  •  1
  • Rodney  · 技术社区  · 14 年前

    我正试图在屏幕上滚动文本,它工作得很好。

    更新 :我仍然无法解决问题,现在可以在我的Live应用程序上演示:

    1. http://www.pokerdiy.com/poker-blinds-timer.aspx 不全屏显示。
    2. 点击顶部的“计时器”选项卡。 然后点击“开始锦标赛”。AT 顶部,滚动消息将 从右边出现。在我的显示器上 (22英寸)-这会在它之前切断 完成了句子。
    3. 然后右键单击可调整为完全 然后重新开始比赛 然后重新开始显示相同的内容 消息。你现在就知道了 作品!

    这是一个大问题,因为我想在顶部滚动长消息…有什么想法吗?

    问题摘要:

    我在屏幕右侧有一个文本块,它没有设置宽度,并且绑定到一个字符串值。我程序化地启动一个动画,在compositeTransform.translateX上更改“从”和“到”的值,以便在屏幕上移动整个文本块,以显示滚动的外观。这个文本块的宽度会自动调整为绑定字符串的值,我将其设置为动画值(负值),这样它就可以从屏幕的左侧(参见下面的代码)。

    所以这一切都是梦幻般的…但不是长信息。似乎有一个宽度限制截断我的文本。在某一点上,它以一个宽度限制(最后一个字符呈现为半个字符,因此它不是字符限制)。我设置了一个循环来创建一个大字符串并输出文本块的实际宽度,它显示为17000(正确)。宽度也很好,实际的文本属性显示完整的字符串…但是用户界面在某一点截短了它,我不知道。

    所以-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 回复  |  直到 14 年前
        1
  •  2
  •   iCollect.it Ltd    14 年前

    第1部分: 如果你想用像素 动画,使用画布作为 父对象。网格可以工作,但请参阅第2部分(下面)中的问题原因。

    第2部分: 基本上是你的 文本由父级引起 正在裁剪子级的容器。这个 正在根据 父级和它忽略的偏移量 你的文字。

    解决方案:

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

    • 可能需要添加剪辑矩形 在画布上隐藏 扩展到您所在位置的文本 不想看到它,但这将取决于屏幕上的其他组件隐藏重叠。 如果添加剪辑矩形,请确保使用canvas.left而不是translatex来设置文本位置的动画,否则可能会再次出现原始问题!