WPF-расширитель сетки расширяет пространство при перемещении гридсплиттера

У меня есть следующий.XAML:

<Grid>
<Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Expander Grid.Row="0">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="5"/>
        </Grid.RowDefinitions>
        <ListView Grid.Row="0"/>
        <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Top" ShowsPreview="true" ResizeDirection="Rows" Height="5"/>
   </Grid>
</Expander>
<Expander Grid.Row="1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="5"/>
        </Grid.RowDefinitions>
        <ListView Grid.Row="0"/>
        <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Top" ShowsPreview="true" ResizeDirection="Rows" Height="5"/>
   </Grid>
</Expander>

Есть 2 расширителя с гридсплиттерами. Я хочу добиться следующих 2 вещей:

(1) Всякий раз, когда один расширитель разрушается, другой расширитель должен заполнить пространство

(2) Всякий раз, когда перемещается один гридсплиттер, 2 расширителя автоматически регулируют свою высоту, чтобы заполнить пространство.

Ожидается, что поведение будет аналогично поведению окна обзора диспетчера ресурсов Windows. Любой совет и понимание приветствуется

1 ответ

Посмотрите, если это то, что вам нужно:

<Window ...>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <Expander Grid.Row="0" Collapsed="Expander_Collapsed_1">
        <ListView x:Name="Lv1"/>
    </Expander>
    <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Top" ShowsPreview="true" ResizeDirection="Rows" Height="5" Background="#FFB82424"/>

    <Expander Grid.Row="2" Collapsed="Expander_Collapsed_1">
        <ListView x:Name="Lv2" Grid.Row="0"/>          
    </Expander>
    <GridSplitter Grid.Row="3" HorizontalAlignment="Stretch" VerticalAlignment="Top" ShowsPreview="true" ResizeDirection="Rows" Height="5" Background="#FFC51A1A"/>
</Grid>
</Window>

Код:

private void Expander_Collapsed_1(object sender, RoutedEventArgs e)
{
    DependencyObject dobj = VisualTreeHelper.GetParent(sender as Expander);
    while (!(dobj is Grid))
        dobj = VisualTreeHelper.GetParent(dobj);

    int i = Grid.GetRow(sender as Expander);
    Grid grd = dobj as Grid;
    grd.RowDefinitions[i].Height = GridLength.Auto;
}
Другие вопросы по тегам