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>