WPF——TextBox 滚动条与StackPanel

最近写的一个WPF小程序,边学边做的,在动态添加控件时出的这个问题,试了一下,直接写xaml也有这个问题,所以可以简单的说明一下.

直接上xaml:

[plain] view plain copy
  1. <Window x:Class="WpfApplication2.MainWindow"  
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  4.         Title="MainWindow" Height="350" Width="525">  
  5.     <TabControl>  
  6.         <TabItem Header="station1">  
  7.             <StackPanel VerticalAlignment="Stretch">  
  8.                 <TabControl VerticalAlignment="Stretch">  
  9.                     <TabItem Header="output" VerticalAlignment="Stretch">  
  10.                         <TextBox VerticalAlignment="Stretch"  
  11.                                  VerticalScrollBarVisibility="Auto"  
  12.                                  TextWrapping="Wrap"  
  13.                                  AcceptsReturn="True"></TextBox>  
  14.                     </TabItem>  
  15.                 </TabControl>  
  16.             </StackPanel>  
  17.         </TabItem>  
  18.     </TabControl>  
  19. </Window>  
可以看到,是一个TabControl中的TabItem嵌套TabControl的界面,关键在于最内层的TextBox,后台代码会在这个TextBox输出很多行数据,但是发现当TextBox满了以后,滚动条并没有出现,而TextBox则继续增大,看不到后面的数据了,一开始以为是哪里的设置问题,搞了很久都没有看出来问题,后来在网上随便搜索的时候,发现问题出在了容器StackPanel上:

StackPanel的容器特性中有一条:如果容器中的控件大小超出了StackPanel的大小,那么超出的部分会被截掉

至此,原因明了了,StackPanel截掉了TextBox多出的部分

解决办法很简单,换一个容器就可,比如DockPanel:

[plain] view plain copy
  1. <Window x:Class="WpfApplication2.MainWindow"  
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  4.         Title="MainWindow" Height="350" Width="525">  
  5.     <TabControl>  
  6.         <TabItem Header="station1">  
  7.             <DockPanel VerticalAlignment="Stretch">  
  8.                 <TabControl VerticalAlignment="Stretch">  
  9.                     <TabItem Header="output" VerticalAlignment="Stretch">  
  10.                         <TextBox VerticalAlignment="Stretch"  
  11.                                  VerticalScrollBarVisibility="Auto"  
  12.                                  TextWrapping="Wrap"  
  13.                                  AcceptsReturn="True"></TextBox>  
  14.                     </TabItem>  
  15.                 </TabControl>  
  16.             </DockPanel>  
  17.         </TabItem>  
  18.     </TabControl>  
  19. </Window>  

问题解决,滚动条正常出现。

还有一个小细节:使用StackPanel时,TextBox是不能垂直填充整个容器的,这应该也是StackPanel的特性,因为StackPanel默认Orientation = "Vertical" 。 如果早点发现这个可能就能更早的知道是容器的问题了。

虽然是个小问题,但是如果不熟悉容器还真可能要折腾一会。

猜你喜欢

转载自blog.csdn.net/andrewniu/article/details/80700676