Уменьшение размера окна при закрытии расширителя

Привет, ребята, у меня есть 3 расширителя столбцов, когда вы их все открываете и изменяете размер окна, они растягиваются должным образом, чтобы соответствовать окну. Когда вы закрываете расширитель, я хочу, чтобы он уменьшал окно по ширине этого расширителя, когда оно было открыто. В настоящее время он закрывает расширитель обратно до 20 пикселей, но открытые расширители будут больше (он растягивается, чтобы заполнить пустое пространство).

Код:

<UserControls:ExpanderWindow x:Class="Lainezor.Windows.ExpanderWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:xt="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit.Extended"
    xmlns:pg="clr-namespace:Microsoft.Windows.Controls.PropertyGrid;assembly=WPFToolkit.Extended"
    xmlns:MyUserControls="clr-namespace:Lainezor.UserControls.ExpanderControls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    SizeToContent="WidthAndHeight" Background="AliceBlue" 
    ResizeMode="CanResize" WindowStartupLocation="Manual" Loaded="Window_Loaded">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition>
            <ColumnDefinition.Style>
                <Style TargetType="ColumnDefinition">
                    <Setter Property="Width" Value="20" />
                    <Setter Property="MinWidth" Value="20" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsExpanded, ElementName=Expander1}" Value="True">
                            <Setter Property="Width" Value="20*" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ColumnDefinition.Style>
        </ColumnDefinition>
        <ColumnDefinition Width="2"/>
        <ColumnDefinition>
            <ColumnDefinition.Style>
                <Style TargetType="ColumnDefinition">
                    <Setter Property="Width" Value="20" />
                    <Setter Property="MinWidth" Value="20" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsExpanded, ElementName=Expander2}" Value="True">
                            <Setter Property="Width" Value="20*" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ColumnDefinition.Style>
        </ColumnDefinition>
        <ColumnDefinition Width="2"/>
        <ColumnDefinition>
            <ColumnDefinition.Style>
                <Style TargetType="ColumnDefinition">
                    <Setter Property="Width" Value="20" />
                    <Setter Property="MinWidth" Value="20" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsExpanded, ElementName=Expander3}" Value="True">
                            <Setter Property="Width" Value="20*" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ColumnDefinition.Style>
        </ColumnDefinition>
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Expander Name="Expander1" Grid.Column="0" IsExpanded="True" IsEnabled="True" ExpandDirection="Right">
        <Expander.Header>
            <TextBlock Text="{Binding Source={StaticResource ResourceWrapper}, Path=MyStrings.Expander1Label}"  RenderTransformOrigin="0,0" >
                <TextBlock.LayoutTransform>
                        <RotateTransform Angle="90"/>
                </TextBlock.LayoutTransform>
            </TextBlock>
        </Expander.Header>
        <MyUserControls:UserControl1 x:Name="UserControl1" SizeChanged="UserControl1_SizeChanged"/>
    </Expander>
    <GridSplitter x:Name="gridSplitter" Grid.Column="1" Width="2" Background="#CBE5FE" ResizeDirection="Columns" ResizeBehavior="PreviousAndNext" VerticalAlignment="Stretch" />
    <Expander Grid.Column="2" Grid.RowSpan="2" Name="Expander2" ExpandDirection="Right" Grid.IsSharedSizeScope="True">
        <Expander.Header >
            <TextBlock Text="{Binding Source={StaticResource ResourceWrapper}, Path=MyStrings.Expander2Label}">
                <TextBlock.LayoutTransform>
                        <RotateTransform Angle="90" />              
                </TextBlock.LayoutTransform>
            </TextBlock>
        </Expander.Header>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <MyUserControls:UserControl2 x:Name="UserControl2" HorizontalAlignment="Stretch"/>
        </Grid>
    </Expander>
    <GridSplitter x:Name="gridSplitterTwo" Grid.Column="3" Width="2" Background="#CBE5FE" ResizeDirection="Columns" ResizeBehavior="PreviousAndNext"  VerticalAlignment="Stretch" />
    <Expander Grid.Column="4" Grid.RowSpan="2" Name="Expander3" ExpandDirection="Right">
        <Expander.Header >
            <TextBlock Text="Lainezor">
                <TextBlock.LayoutTransform>
                        <RotateTransform Angle="90" />              
                </TextBlock.LayoutTransform>
            </TextBlock>
        </Expander.Header>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <MyUserControls:UserControl3 x:Name="UserControl3" HorizontalAlignment="Stretch" />
        </Grid>
    </Expander>
</Grid>


person Lainezor    schedule 27.03.2013    source источник
comment
Вы установили SizeToContent="WidthAndHeight" для окна?   -  person Hossein Narimani Rad    schedule 27.03.2013
comment
Да, он установлен в WidthAndHeight   -  person Lainezor    schedule 27.03.2013


Ответы (2)


Прикрепите обработчик события к свернутому событию расширителя и вычтите ((Expander)sender).ActualWidth -20 из ширины окна.

person Darren    schedule 27.03.2013

Установите SizeToContent окна на "WidthAndHeight" и не устанавливайте его Width или Height или designWidth или designHeight.

person Hossein Narimani Rad    schedule 27.03.2013
comment
1-й расширитель расширяется при открытии окна, а пользовательский элемент управления внутри него имеет ширину 300. Это я не могу изменить. - person Lainezor; 27.03.2013
comment
Я думаю, было бы лучше, если бы вы опубликовали полный xaml-код окна. - person Hossein Narimani Rad; 27.03.2013