2013-03-27 4 views
1

Привет, ребята У меня есть 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> 

+0

ли вы установили 'SizeToContent =«WidthAndHeight»' для окна? –

+0

Да, он установлен на WidthAndHeight – Lainezor

ответ

3

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

10

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

+0

1-й расширитель расширяется, когда окно открыто, а пользовательский элемент управления внутри него имеет ширину 300. Это я не могу изменить. – Lainezor

+0

Я думаю, было бы лучше, если бы вы опубликовали полный код xaml для Window. –

+0

Отправлено все. – Lainezor

Смежные вопросы