WPF之GridSplitter浅谈

WPF中会经常用到Grid布局,而在布局中,我们有时会考虑使用可变的宽度,那么就会用到GridSplitter控件,以便实现重新分割,改变布局。而在实际使用中,我们有可能有这样的需求,GridSplitter分割布局使界面可调整大小,但同时也需要一个初始值。如果直接用的话,可能存在这样的情况,初始值设定成某个数值,剩余的为*,这样处理的缺点是拖动GridSplitter时,设置成某个数值的区域,会脱离标准导致显示出现问题,比如放大会显示异常。而如果我们设置成那比例分配*,会出现调整整个布局时,其中的所有分割区域都进行了改变。例如下面的代码

	<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" FontSize="55" >Left side</TextBlock>
        <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Stretch" />
        <TextBlock Grid.Column="2" FontSize="55" >Right side</TextBlock>
    </Grid>

这里我们在变化整个窗体大小时,里面待分割区域也会按照最开始设置的比例重新调整大小,而不能达到只有一个部分被放大或缩小。

那么有没有一种方式,能够实现有初始值,但同时调整整个界面大小时,设定为指定大小的区域,不会随其改变呢,而是只在托动GridSplitter时改变大小?有的,代码如下,具体解释就不多说了吧,读者自己理解也有助于学习,主要还是因为我懒,哈哈。

<Window
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
	x:Class="WpfApplication1.MainWindow"
	x:Name="Window"
	Title="MainWindow"
	Width="671" Height="480">

	<Grid>
		<Grid.ColumnDefinitions>
			<ColumnDefinition Width="150" />
			<ColumnDefinition Width="Auto"/>
			<ColumnDefinition Width="*"/>
		</Grid.ColumnDefinitions>

		<TextBox BorderBrush="Red" x:Name="leftmain" Text="1111111111111111111111111"/>
		<!--这里除了HorizontalAlignment="Right"里的Right以外都可以进行拖拽,只有Right不行-->
		<GridSplitter Grid.Column="1" HorizontalAlignment="Center" Width="5" Background="Gray"/>
		
		<DockPanel Grid.Column="2" x:Name="sta" LastChildFill="True" Background="Fuchsia">
            <TextBlock Text="内容11111111111111111111111111111111" />
        </DockPanel>
	</Grid>
</Window>
发布了120 篇原创文章 · 获赞 50 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/u014650759/article/details/100123901