2

我有一个 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>
4

2 回答 2

2

我提供 2 个选项:

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

它解决了我的问题。

于 2012-09-04T14:12:41.327 回答
0

像这样的东西

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

但是您需要添加一个多转换器并传递窗口大小和第 1 列大小。

于 2012-04-04T13:24:07.993 回答