gpt4 book ai didi

wpf - 无法在 WPF TextBlock 中获取垂直滚动条

转载 作者:行者123 更新时间:2023-12-04 13:37:27 26 4
gpt4 key购买 nike

我在 wpf TextBlock 控件(.Net 3.5)中显示文本。文本块的内容因用户在列表框中选择的内容而异。文本换行,所以我不需要水平滚动条。但是,文本通常比窗口可以显示的数量多,所以我需要一个垂直滚动条。

当我开始搜索时,我很快发现答案是将 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 保持其高度,这当然不会。

希望我只是忽略了一些明显的东西..

谢谢!

最佳答案

因为您的 ScrollViewer 位于 StackPanel 中,所以它将获得显示其内容所需的尽可能多的垂直空间。

您需要使用限制垂直空间的父面板,例如 DockPanel 或 Grid。

<DockPanel>
<ListBox DockPanel.Dock="Top" HorizontalAlignment="Stretch"
VerticalAlignment="Top" Height="200"
SelectionChanged="listbox_changed" SelectionMode="Single">
</ListBox>
<Button DockPanel.Dock="Top" Click="Select_clicked">Select</Button>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<TextBlock Name="textblock" TextWrapping="Wrap"/>
</ScrollViewer>
</DockPanel>

关于wpf - 无法在 WPF TextBlock 中获取垂直滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com