【问题标题】:Unable to get vertical scroll bars in an WPF TextBlock无法在 WPF TextBlock 中获取垂直滚动条
【发布时间】:2011-08-03 00:39:06
【问题描述】:

我在 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 保持它的高度,这当然不会这样做。

希望我只是忽略了一些明显的事情..

谢谢!

【问题讨论】:

    标签: wpf textblock scrollbars


    【解决方案1】:

    因为您的 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>
    

    【讨论】:

      猜你喜欢
      • 2015-07-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多