首页 > 解决方案 > 使多个 gridsplitters 正确地一起工作

问题描述

所以,我有一个看起来像这样的 XAML 布局:

<Grid Background="white">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="cdMainmenu" Width="200" />
        <ColumnDefinition Width="80" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="80" />
        <ColumnDefinition x:Name="cdReminders" Width="200" />
    </Grid.ColumnDefinitions>

    <Frame Grid.Column="0" Background="Beige" >
    </Frame>
    <Frame Grid.Column="2" Background="LightGoldenrodYellow" >
    </Frame>
    <Frame Grid.Column="4" Background="DarkSeaGreen" >
    </Frame>
    <Frame Grid.Column="1" Background="Orange" >
    </Frame>
    <Frame Grid.Column="3" Background="Coral" >
    </Frame>

    <GridSplitter Grid.Column="0" x:Name="gridSplitterSx" HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="2" Background="Black" Margin="0,128,0,0" />

    <GridSplitter Grid.Column="4" x:Name="gridSplitterDx" HorizontalAlignment="Left" VerticalAlignment="Stretch" Width="2" Background="Black" Margin="0,173,0,0" ResizeBehavior="PreviousAndCurrent" />

</Grid>

最左边的 GridSplitter (gridSplitterSx) 符合我的预期:在移动它时,它会正确调整 Beige 部分的大小并随之移动 Orange 部分,从而正确缩小 LightGoldenrodYellow 部分的宽度。

然而,最右边的 GridSplitter (gridSplitterDx) 没有:当移动它时,DarkSeaGreen 部分保持其当前宽度,而 Coral 部分以与我移动鼠标相反的方式展开。

我想要实现的是:在移动 gridSplitterDx 时,DarkSeaGreen 部分应展开并将 Coral 部分向左移动,保持其大小不变,缩小 LightGoldenrodYellow 部分。

关于我做错了什么的任何提示?

标签: c#xaml

解决方案


因此,对于任何有兴趣的人,我可以通过将橙色部分与米色部分一起移动(通过将它们都关闭到具有两列的网格中)并为 gridSplitterSx 提供等于橙色部分宽度的右边距来解决我的问题;我还将 Coral Section 与 DarkSeaGreen 一起移动,同样将它们放在一个 Grid 中,并为 gridSplitterDx 提供与 Coral Section 宽度相等的左边距。

像这样的东西:

<Grid Background="white">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="cdMainmenu" Width="200" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition x:Name="cdReminders" Width="200" />
    </Grid.ColumnDefinitions>

    <Grid Grid.Column="0" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <Frame Grid.Column="0" Background="Beige">
        </Frame>
        <Frame Grid.Column="1" Background="Orange" Width="80" >
        </Frame>
    </Grid>
    <Frame Grid.Column="1" Background="LightGoldenrodYellow" >
    </Frame>
    <Grid Grid.Column="2" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Frame Grid.Column="0" Background="Coral" Width="80" >
        </Frame>
        <Frame Grid.Column="1" Background="DarkSeaGreen" >
        </Frame>
    </Grid>

    <GridSplitter Grid.Column="0" x:Name="gridSplitterSx" HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="2" Background="Black" Margin="0,128,80,0" />

    <GridSplitter Grid.Column="2" x:Name="gridSplitterDx" HorizontalAlignment="Left" VerticalAlignment="Stretch" Width="2" Background="Black" Margin="80,173,0,0" />

</Grid>

对于我的用例,这足以解决问题;我希望这对其他人也有用


推荐阅读