WPF GridSplitter:当第一个列的大小为“*”时,更改最后一列宽度

时间:2014-07-30 07:48:22

标签: wpf gridsplitter

我有一种情况,网格的第一列应该占用网格的剩余空间,但我希望用户可以使用GridSplitter调整最后一列的大小。

以下是布局的简化示例:

<?xml version='1.0' encoding='utf-8' ?>
<Window
  x:Class="WPFApplication1.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window1" Height="300" Width="500">
  <Grid Margin="10">
    <Grid.ColumnDefinitions>
      <ColumnDefinition />
      <ColumnDefinition Width="10" />
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition Width="10" />
      <ColumnDefinition Width="100" />
    </Grid.ColumnDefinitions>

    <Border BorderBrush="Black"
            BorderThickness="1" />

    <Border BorderBrush="Black"
            BorderThickness="1"
            Width="20"
            Grid.Column="2" />

    <GridSplitter HorizontalAlignment="Center"
                  VerticalAlignment="Stretch"
                  Width="10"
                  Grid.Column="3" />

    <Border BorderBrush="Black"
            BorderThickness="1"
            Grid.Column="4" />

  </Grid>
</Window>

在此示例中,边框位于此处以查看列的内容。

此示例不起作用,因为移动GridSplitter会更改左侧列的大小,但右侧的最后一列应调整大小。

有没有人可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

你可以嵌套两个网格。

外部网格:

  • 3列(*auto100
  • 第三列包含问题中最后一列的内容
  • 第一列包含子网格

子网格:

  • 3列(*10auto

此子网格包含问题中前3列的内容。

这样,分割器就会在子网格和最后一列之间进行分割。

因为第一列的宽度设置为*,所以它会获得剩余的宽度。