【问题标题】:Smooth scrolling vertical text for progress平滑滚动垂直文本以获得进度
【发布时间】:2012-01-24 14:59:30
【问题描述】:

我需要创建一个在启动画面上显示文本进度的控件(例如,将显示加载的各种模块和启动状态)。我希望控件仅显示最后 3 或 4 行,以便新文本以流畅的动画方式将先前的文本向上推。

我应该为此控件或其他控件使用 TextBox 控件吗?如果有人能够为我指明正确的方向,那就太好了。

【问题讨论】:

  • 平滑滚动的文字很难!如果“平滑度”是一项要求,请确定它是什么硬件要求!
  • 没有时间写代码示例,因此评论无法回答,但您是否考虑过使用创建从 Canvas 派生的自定义控件,其中包含 4x TextBlocks 用于线条并为 Canvas.GetTop 附加属性设置动画?
  • 您可能应该使用 TextBlocks(而不是 TextBoxes)。正如 Andrew Burnett-Thompson 博士在他的评论中所描述的那样,您还可以使用 Storyboard 为其位置设置动画。
  • 网上有几个这样的例子。搜索 WPF 选取框。
  • 我不确定这些是否可行,因为我不希望它表现得像一个普通的选框。我希望 Textblock 始终显示最后 3 或 4 行文本。只有在将更多文本推入其中时,它才会向上滚动,以便为它腾出空间。我将使用 UI 来显示正在加载的模块,以便将文本慢慢添加到其中。到目前为止,我发现的所有内容都是针对刚刚飞出屏幕的字幕文本。

标签: c# wpf textbox scroll smooth-scrolling


【解决方案1】:

您可以使用ListBoxListBoxItems 文本和自定义动画Panel 轻松实现此效果。简而言之,PanelTransform 对象添加到每个项目的 RenderTransform 属性中,这使您可以动画项目移动到它们的位置。

查看这个非常好的article 以了解如何创建动画Panel...当然,您必须编写自定义代码以按照您想要的方式排列项目。一旦你有了自定义的Panel,你就可以在ListBox 中使用它(假设你已经包含了对Panel 所在的命名空间的引用),如下所示:

<ListBox HorizontalContentAlignment="Stretch" 
    ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <YourXmlns:YourAnimatedStackPanelPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

【讨论】:

    【解决方案2】:

    只是一个想法,但你说你想让它在添加另一行时一次滚动一行。使用ScrollViewer.LineUp 怎么样?我知道这非常粗糙,但作为一个想法......

    private void ScrollBox()
    {
        foreach (string line in lines)
        {
            scrollbox.LineUp();
            textbox.Text += "/r/n Next Line";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-01
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2012-12-12
      相关资源
      最近更新 更多