WPF——TextBox 滚动条与StackPanel

来源:互联网 发布:金数据是干嘛用的 编辑:程序博客网 时间:2024/05/15 09:08

最近写的一个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>
可以看到,是一个TabControl中的TabItem嵌套TabControl的界面,关键在于最内层的TextBox,后台代码会在这个TextBox输出很多行数据,但是发现当TextBox满了以后,滚动条并没有出现,而TextBox则继续增大,看不到后面的数据了,一开始以为是哪里的设置问题,搞了很久都没有看出来问题,后来在网上随便搜索的时候,发现问题出在了容器StackPanel上:

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" 。 如果早点发现这个可能就能更早的知道是容器的问题了。

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


0 0
原创粉丝点击