GridSplitter:与GridSplitter不直接相关的缩放单元格

时间:2012-04-04 10:07:33

标签: wpf layout grid gridsplitter

我有一个WPF网格,其中四列只包含一个GridSplitter。其中两列(0和3)是可伸缩的,但是一个可伸缩列不与GridSplitter(第2列)直接相邻。

第0列和第3列必须具有相同的初始大小。所以我不能将第0列和第1列放在嵌套网格中。

我该如何解决这个问题?

<Grid Height="40">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Rectangle Grid.Column="0" Fill="Blue" Margin="8" />
    <Rectangle Grid.Column="1" Fill="Yellow" Margin="8" Width="24" />
    <GridSplitter Grid.Column="2" Width="8" VerticalAlignment="Stretch" />
    <Rectangle Grid.Column="3" Fill="Red" Margin="8" />
</Grid>

编辑:我在nickolay.laptev

的帮助下解决了这个问题
<Grid Height="40">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Rectangle Grid.Column="0" Fill="Blue" Margin="8" />
    <Rectangle Grid.Column="1" Fill="Yellow" Margin="8 8 16 8" Width="24" />
    <GridSplitter Grid.Column="1" Width="8" VerticalAlignment="Stretch" HorizontalAlignment="Right" ResizeBehavior="PreviousAndNext" />
    <Rectangle Grid.Column="2" Fill="Red" Margin="8" />
</Grid>

2 个答案:

答案 0 :(得分:2)

我提供两种选择:

  1. 不要将单列用于GridSplitter。而是将其添加到可调整大小的列之间的列中(在您的情况下为第二列)。您可以使用水平对齐将拆分器放在列中的任何位置。
  2. 处理列手动调整大小。 如果启用了预览,请使用GridSplitter.DragCompleted事件。更改所需的列宽。 如果禁用了预览,请使用带有预览前缀的其他事件。
  3. 它解决了我的问题。

答案 1 :(得分:0)

像这样的东西

        <ColumnDefinition Width="{Binding ElementName=sizedColumn.ActualWidth}" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" x:Name="sizedColumn"/>  

但是你需要添加一个多转换器,并且还要传递窗口大小和列1大小。