Изменение размера только открытых расширителей

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

Каков наилучший способ заставить их растягиваться только при расширении и возвращаться к маленькому размеру в 10 пикселей в ширину при сворачивании?


person Lainezor    schedule 26.03.2013    source источник


Ответы (1)


Вы можете установить Triggers на ColumnDefinitions, чтобы установить Width на фиксированное, когда Expander закрыто, и установить пропорциональное, когда Expander открыто.

Пример:

     <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition>
                <ColumnDefinition.Style>
                    <Style TargetType="ColumnDefinition">
                        <Setter Property="Width" 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>
                <ColumnDefinition.Style>
                    <Style TargetType="ColumnDefinition">
                        <Setter Property="Width" 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>
                <ColumnDefinition.Style>
                    <Style TargetType="ColumnDefinition">
                        <Setter Property="Width" 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>
        <Expander Name="expander1" Grid.Column="0" Header="Expander1" />
        <Expander Name="expander2" Grid.Column="1" Header="Expander2" />
        <Expander Name="expander3" Grid.Column="2" Header="Expander3" />
    </Grid>

Результат:

введите здесь описание изображениявведите здесь описание изображения

введите здесь описание изображениявведите здесь описание изображения

person sa_ddam213    schedule 26.03.2013
comment
Это здорово, но когда вы закрываете расширитель, он не сжимает окно обратно, а только больше растягивает открытые. Это не то, чего я хочу. Я хочу, чтобы при закрытии он сжимался до размера закрытых плюс размер открытых перед закрытием и не растягивал их. - person Lainezor; 27.03.2013
comment
Прикрепите обработчик события к свернутому событию расширителя и вычтите ((Expander)sender).ActualWidth -20 из ширины окна. - person Darren; 27.03.2013
comment
@ Overmind.900, или вы можете просто установить окно «SizeToContent = True» - person sa_ddam213; 28.03.2013