Zev*_*itz 8 wpf gridsplitter wpf-grid
我有以下XAML:
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="0,0" Grid.Column="0" Background="Yellow" />
<TextBlock Text="1,0" Grid.Column="1" Background="SkyBlue" />
<GridSplitter Width="20" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Stretch" ShowsPreview="True" />
<TextBlock Text="3,0" Grid.Column="3" Grid.Row="0" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
当只有一个ColumnDefinition用Width的Auto,在GridSplitter正常工作.然而,一旦存在与多个列Width的Auto,所述第一Auto列中的时也被调整大小GridSplitter移动(可在细胞中可以看出1,0).
在调整大小之前:
调整大小后:
如何防止GridSplitter调整第二列的大小?
如果您无法修改现有列,也许您可以尝试以编程方式实现此行为...
命名列:
<Grid.ColumnDefinitions>
<ColumnDefinition Name="firstColumn" Width="*" />
<ColumnDefinition Name="secondColumn" Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)
将事件添加到网格spliiter:
<GridSplitter Name="gridSplitter" DragStarted="gridSplitter_DragStarted" DragCompleted="gridSplitter_DragCompleted" />
Run Code Online (Sandbox Code Playgroud)
然后只需在拆分器拖动之前保存列宽,并将更改应用于第一列宽度,而不是第二列:
public partial class MainWindow : Window
{
private double savedFirstColumnWidth;
private double savedSecondColumnWidth;
private void gridSplitter_DragStarted(object sender, DragStartedEventArgs e)
{
// Save the initial column width values
savedFirstColumnWidth = firstColumn.ActualWidth;
savedSecondColumnWidth = secondColumn.ActualWidth;
}
private void gridSplitter_DragCompleted(object sender, DragCompletedEventArgs e)
{
double dragChange = e.HorizontalChange;
// Change the width of the first column instead of second
firstColumn.Width = new GridLength(savedFirstColumnWidth + dragChange);
// Set the with of the second column to the value saved before the drag
secondColumn.Width = new GridLength(savedSecondColumnWidth);
}
}
Run Code Online (Sandbox Code Playgroud)