我在wpf TextBlock控件(.Net 3.5)中呈现文本。文本块的内容取决于用户在列表框中选择的内容。文字包装,所以我不需要水平滚动条。但是,通常有更多的文本不能显示窗口的数量,所以我需要一个垂直滚动条。无法在WPF TextBlock中获得垂直滚动条
当我开始搜索时,我很快发现答案是将TextBlock包装在ScrollViewer中。但是,它不工作(TM),我希望有人可以帮我找出原因。
这是UI代码的结构:
<Window x:Class=..>
<StackPanel>
<ListBox HorizontalAlignment="Stretch"
VerticalAlignment="Top" Height="200"
SelectionChanged="listbox_changed" SelectionMode="Single">
</ListBox>
<Button Click="Select_clicked">Select</Button>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<TextBlock Name="textblock" TextWrapping="Wrap"/>
</ScrollViewer>
</StackPanel>
</Window>
当用户选择在列表框中的项,与该条目相关的一些文本被呈现TextBlock中。我原以为代码应该是所有必需的,但它从来没有给我提供一个滚动条。
搜索和实验给了我两个线索:问题的根源可能与我动态更新TextBlock的内容有关,并且TextBlock不会根据新内容调整自身大小。我发现一个似乎相关的帖子,说通过将TextBlock的高度设置为其ActualHeight(在更改其内容之后),它将起作用。但它没有(我看不到这个效果)。其次,如果我设置ScrollViewer的高度(在设计时间内),那么我会得到一个垂直滚动条。例如,如果我在上面的xaml中将它设置为300,那么结果几乎是好的,因为当我需要它时,第一次打开的窗口包含一个带有垂直滚动条的TextBlock。但是,如果我使窗口更大(在运行时用鼠标调整大小),ScrollViewer不会利用新的窗口大小,而是根据xaml保持其高度,当然这不会。
希望,我只是忽略了一些东西明显..
谢谢!
使用Grid而不是StackPanel取得了诀窍。谢谢! – Kristoffer 2011-04-11 13:27:49