我正在使用 wpf TextBlock 控件 (.Net 3.5) 显示文本。文本块的内容根据用户在列表框中选择的内容而变化。文本会自动换行,因此我不需要水平滚动条。但是,通常有更多的文本超过了窗口可以显示的数量,因此我需要一个垂直滚动条。
当我开始搜索时,很快发现答案是将 TextBlock 包装在 ScrollViewer 中。然而,它不起作用 (TM),我希望有人能帮助我弄清楚原因。
这是 UI 代码的结构:
当用户在列表框中选择一个项目时,与该项目相关的一些文本会显示在TextBlock中。我原以为代码就足够了,但它从未提供滚动条。
搜索和实验给了我两个线索:问题的根源可能与我动态更新TextBlock内容有关,并且TextBlock不会根据新内容自动调整大小。我找到了一篇相关的帖子,说通过将TextBlock的高度设置为其ActualHeight(在更改其内容后),它会起作用。但它并没有(我看不到这方面的效果)。
其次,在设计时间内设置ScrollViewer的高度,那么我确实会得到垂直滚动条。例如,如果我在上面的xaml中将其设置为300,则结果几乎是好的,因为首次打开的窗口包含一个带有垂直滚动条的TextBlock,仅当我需要它时。但是,如果我使窗口变大(在运行时使用鼠标调整其大小),则ScrollViewer不会利用新的窗口大小,而是保持其高度与xaml相同,这当然不行。
希望我只是忽略了一些显而易见的东西。。
谢谢!
当我开始搜索时,很快发现答案是将 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相同,这当然不行。
希望我只是忽略了一些显而易见的东西。。
谢谢!