我有一个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>
答案 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
中不需要TextBox
,TextBox
控件有自己的ScrollViewer
。并且您需要定义TextBox
的宽度,以便滚动条知道其固定宽度并将包装文本。
然后,您必须将TextBox设置为看起来像TextBlock
根据微软的Ifeanyi Echeruo,来自MSDN
,这个ScrollViewer
无法正常工作的一个很好的理由
ScrollViewer首先询问其内容的大小 如果内容需要更多的空间,则没有约束 然后,查看者有时间开始使用某些ScrollBars
在没有约束的情况下,TextBlock将始终选择返回a 所有文本都适合单行的大小。
带有ScrollBars的ScrollViewer永远不会得到一个TextBlock来包装。
但是,您可能会想出一个Measure \ Arrange组合 对于你自己的面板,几乎像ScrollViewer,但我不能 想想任何可以在没有明确的情况下满足两种约束的逻辑 了解所述孩子的行为