最近写的一个WPF小程序,边学边做的,在动态添加控件时出的这个问题,试了一下,直接写xaml也有这个问题,所以可以简单的说明一下.
直接上xaml:
- <Window x:Class="WpfApplication2.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow" Height="350" Width="525">
- <TabControl>
- <TabItem Header="station1">
- <StackPanel VerticalAlignment="Stretch">
- <TabControl VerticalAlignment="Stretch">
- <TabItem Header="output" VerticalAlignment="Stretch">
- <TextBox VerticalAlignment="Stretch"
- VerticalScrollBarVisibility="Auto"
- TextWrapping="Wrap"
- AcceptsReturn="True"></TextBox>
- </TabItem>
- </TabControl>
- </StackPanel>
- </TabItem>
- </TabControl>
- </Window>
StackPanel的容器特性中有一条:如果容器中的控件大小超出了StackPanel的大小,那么超出的部分会被截掉
至此,原因明了了,StackPanel截掉了TextBox多出的部分
解决办法很简单,换一个容器就可,比如DockPanel:
- <Window x:Class="WpfApplication2.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow" Height="350" Width="525">
- <TabControl>
- <TabItem Header="station1">
- <DockPanel VerticalAlignment="Stretch">
- <TabControl VerticalAlignment="Stretch">
- <TabItem Header="output" VerticalAlignment="Stretch">
- <TextBox VerticalAlignment="Stretch"
- VerticalScrollBarVisibility="Auto"
- TextWrapping="Wrap"
- AcceptsReturn="True"></TextBox>
- </TabItem>
- </TabControl>
- </DockPanel>
- </TabItem>
- </TabControl>
- </Window>
问题解决,滚动条正常出现。
还有一个小细节:使用StackPanel时,TextBox是不能垂直填充整个容器的,这应该也是StackPanel的特性,因为StackPanel默认Orientation = "Vertical" 。 如果早点发现这个可能就能更早的知道是容器的问题了。
虽然是个小问题,但是如果不熟悉容器还真可能要折腾一会。