Стрейч-панель с разветвителем - PullRequest
2 голосов
/ 28 марта 2012

Я хочу реализовать базовый макет WPF с тремя панелями и двумя разделителями (горизонтальный и вертикальный разделитель).

Две панели слева и снизу должны быть подвижными, а одна панель должна соответственно растягиваться..

Вот простой XAML:

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="5"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <StackPanel Background="Aqua" Grid.Column="0" Name="leftPanel" >
                <TextBlock FontSize="35" Foreground="#58290A" TextWrapping="Wrap">Left Hand Side</TextBlock>
            </StackPanel>

            <GridSplitter Grid.Column="1" HorizontalAlignment="Stretch"/>

            <Grid Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="5" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <Label Content="... Clien Area .. Has to Stretch vertically and horizontally" Margin="10"></Label>
                    <Button Click="LeftButton_Click" Margin="10">Close Left Panel</Button>
                    <Button Click="BottomButton_Click" Margin="10">Close Bottom Panel</Button>
                </StackPanel>
                <GridSplitter Grid.Row="1" Background="Gray" HorizontalAlignment="Stretch"/>
                <ListBox Grid.Row="2" Background="Violet" Name="bottomPanel">
                    <ListBoxItem>Hello</ListBoxItem>
                    <ListBoxItem>World</ListBoxItem>
                </ListBox>
            </Grid>
        </Grid>

и codebehind:

    private void LeftButton_Click(object sender, RoutedEventArgs e)
    {
        leftPanel.Visibility = (leftPanel.Visibility == System.Windows.Visibility.Visible)? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible;
    }

    private void BottomButton_Click(object sender, RoutedEventArgs e)
    {
        bottomPanel.Visibility = (bottomPanel.Visibility == System.Windows.Visibility.Visible) ? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible;
    }

Этот код не работает должным образом :(. Есть какие-нибудь эксперты WPF?предложить решение для одновременной работы клиентской области (растянутой) и сплиттера?

DockPanel будет работать отлично, но мне нужен сплиттер!

Спасибо.

1 Ответ

1 голос
/ 28 марта 2012

Для свертывания столбцов необходимо изменить Width из ColumnDefintion, содержащего свернутую панель, на Auto.

...