带有垂直滚动条的TextBlock

时间:2013-09-11 13:31:19

标签: wpf xaml windows-runtime

我有一个TextBlock,可能包含一个长文本,所以我想添加一个垂直滚动条。我最初的尝试是在它周围包裹一个ScrollViewer。这有效但问题是,当我放大时,宽度也会缩放。我试过像这样禁用水平滚动条:

<ScrollViewer IsTabStop="True" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">

但它没有解决问题。我也试过绑定宽度:

Width="{Binding ElementName=Scroller, Path=ViewportWidth}"

它也没有帮助。

所以,我的问题是,如何向其中添加垂直滚动条,但内部有TextBlock的固定宽度和包装文本?这是我的完整代码:

<ScrollViewer Grid.Row="1" IsTabStop="True" VerticalScrollBarVisibility="Auto">
            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Top"  TextWrapping="Wrap" TextAlignment="Center"/>
</ScrollViewer>

2 个答案:

答案 0 :(得分:4)

这个答案有两个部分......第一部分是简单地使用TextBox

<TextBox ScrollViewer.VerticalScrollBarVisibility="Visible" Text="Something really 
    really really really really really really really really long" 
    Style="{StaticResource TextBlockStyle}" />

第二部分只是Style TextBox,以便看起来像<{1}}

TextBlock

如果不适合您的情况,请随意删除这些属性。

答案 1 :(得分:1)

  <TextBox HorizontalAlignment="Center" 
    VerticalAlignment="Top" 
    TextWrapping="Wrap" 
    TextAlignment="Center" 
    VerticalScrollBarVisibility="Auto" Width="300" Style="{StaticResource TextBlockStyle}"/>

ScrollViewer中不需要TextBoxTextBox控件有自己的ScrollViewer。并且您需要定义TextBox的宽度,以便滚动条知道其固定宽度并将包装文本。

然后,您必须将TextBox设置为看起来像TextBlock

根据微软的Ifeanyi Echeruo,来自MSDN

,这个ScrollViewer无法正常工作的一个很好的理由
  

ScrollViewer首先询问其内容的大小   如果内容需要更多的空间,则没有约束   然后,查看者有时间开始使用某些ScrollBars

     

在没有约束的情况下,TextBlock将始终选择返回a   所有文本都适合单行的大小。

     

带有ScrollBars的ScrollViewer永远不会得到一个TextBlock来包装。

     

但是,您可能会想出一个Measure \ Arrange组合   对于你自己的面板,几乎像ScrollViewer,但我不能   想想任何可以在没有明确的情况下满足两种约束的逻辑   了解所述孩子的行为