WPF TextBlock中的自动垂直滚动条?

Bab*_*goo 321 .net c# wpf scrollbar textblock

我有一个TextBlockWPF.我写了很多行,远远超过它的垂直高度.我预计一个垂直滚动条会在发生时自动出现,但事实并非如此.我试图在"属性"窗格中查找滚动条属性,但找不到.

如果我TextBlock的内容超出其高度,我怎样才能自动创建垂直滚动条?

澄清:我宁愿从设计师那里做,而不是直接写给XAML.

Dre*_*kes 536

将它包装在滚动查看器中:

<ScrollViewer>
    <TextBlock />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

注意此答案适用TextBlock于原始问题中要求的(只读文本元素).

如果要在TextBox(可编辑的文本元素)中显示滚动条,请使用ScrollViewer附加的属性:

<TextBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"
         ScrollViewer.VerticalScrollBarVisibility="Auto" />
Run Code Online (Sandbox Code Playgroud)

对于这两个属性的有效值为Disabled,Auto,HiddenVisible.

  • 对不起,我不确定,我不使用WPF设计师.我想如果你直接添加XAML,设计师就会自行更新. (15认同)
  • @conqenator TextBox.ScrollToEnd(); (5认同)
  • 有时,如果封闭元素没有强制执行任何高度,则需要Scrollviewer上的MaxHeight强制显示scoll. (5认同)
  • 我如何从设计师那里做到这一点? (2认同)
  • @Greg,问题是关于`TextBlock`而不是`TextBox`. (2认同)

小智 102

现在可以使用以下内容:

<TextBox Name="myTextBox" 
         ScrollViewer.HorizontalScrollBarVisibility="Auto"
         ScrollViewer.VerticalScrollBarVisibility="Auto"
         ScrollViewer.CanContentScroll="True">SOME TEXT
</TextBox>
Run Code Online (Sandbox Code Playgroud)

  • @jjnguy,我把原来的问题解释为`TextBlock`而不是`TextBox`(如标题和开头行),但第二段提到了`TextBox`.要清楚,这个答案绝对是文本_boxes_的最佳方法,而且我的文字_blocks_ :)是我所知道的最好的方法. (18认同)
  • 谢谢!这对我来说比上面的答案更好. (3认同)
  • 对我来说也工作得更好.至少对于TextBox,当在它周围使用ScrollViewer时,就像在接受的答案中一样,TextBox的边框消失了,因为整个控件都是滚动的,而不仅仅是它的内容. (2认同)

var*_*wal 20

更好的是:

<Grid Width="Your-specified-value" >
    <ScrollViewer>
         <TextBlock Width="Auto" TextWrapping="Wrap" />
    </ScrollViewer>
</Grid>
Run Code Online (Sandbox Code Playgroud)

这样可以确保文本块中的文本不会溢出并重叠文本块下面的元素,如果不使用网格则可能会出现这种情况.当我尝试其他解决方案时,即使文本块已经在其他元素的网格中,这也发生在我身上.请记住,文本块的宽度应为"自动",您应在Grid元素中指定所需的宽度.我在我的代码中做到了这一点,它的工作非常精彩.HTH.


Ton*_* Wu 7

<ScrollViewer MaxHeight="50"  
              Width="Auto" 
              HorizontalScrollBarVisibility="Disabled"
              VerticalScrollBarVisibility="Auto">
     <TextBlock Text="{Binding Path=}" 
                Style="{StaticResource TextStyle_Data}" 
                TextWrapping="Wrap" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

我通过将 MaxHeight 放入 ScrollViewer 以另一种方式执行此操作。

只需调整 MaxHeight 即可显示更多或更少的文本行。简单。


Joh*_*ohn 6

<ScrollViewer Height="239" VerticalScrollBarVisibility="Auto">
    <TextBox AcceptsReturn="True" TextWrapping="Wrap" LineHeight="10" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

这是在XAML中使用滚动TextBox并将其用作文本区域的方法.