WPF: Как сделать окно переполнения и заполнения расширителя

Я пытаюсь создать расширитель, у которого есть кнопка переключения / заголовок в виде тонкой полосы слева, но при расширении заполняет остальную часть окна, даже поверх материала, который уже есть.

Я не совсем уверен, как это сделать лучше всего. Я подумал, наверное, о сетке с 2 столбцами. Сначала будет расширитель, затем - другой материал. Затем у меня будет триггер, который установит ширину второго столбца равной нулю, когда Expander IsExpanded.

Я не совсем уверен, как заставить это работать или даже как сделать это правильно.

Вот пример кода:

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Name="SecondColumn" Width="*" />
        </Grid.ColumnDefinitions>


        <Expander ExpandDirection="Right" IsExpanded="True">

            <Expander.Resources>
                <Style TargetType="Expander">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="Expander" >

                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsExpanded" Value="True" >
                                        <Setter TargetName="SecondColumn" Property="ColumnDefinition.Width" Value="0" />
                                    </Trigger>
                                </ControlTemplate.Triggers>

                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Expander.Resources>

            <ListBox >
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
            </ListBox>
        </Expander>

        <TabControl Grid.Column="1" />

    </Grid>

Я не хочу, чтобы список был виден при раскрытии, иначе TabControl

Любые идеи?


person Ingó Vals    schedule 15.07.2010    source источник


Ответы (1)


Похоже, вы хотите сделать что-то похожее на Пример Карла Шиффлетта здесь. В этом случае он просто изменяет z-index элемента управления содержимым и вручную устанавливает высоту строки, чтобы создать иллюзию всплывающего окна, поэтому вы должны быть уверены, что не пытаетесь аналогичным образом ZIndex другие визуальные элементы.

Убедитесь, что вы устанавливаете ColumnSpan и RowSpan на своем Expander, чтобы при расширении он перекрывал содержимое этих строк.

person Jeff Wain    schedule 15.07.2010
comment
Спасибо, что указали на это, но я думаю, что буду использовать это только в крайнем случае, это просто похоже на взлом, и я боюсь, что это может легко сломаться. - person Ingó Vals; 15.07.2010
comment
Другая вещь, которую вы можете сделать, - это переключиться на настраиваемый элемент управления faux Expander, состоящий из ToggleButton и элемента управления Popup. Таким образом, всплывающее окно будет гарантированно отображаться поверх всего, что там появляется. Однако вам просто нужно создать элемент управления самостоятельно. - person Jeff Wain; 15.07.2010
comment
Я проверю это. И я также попробовал другое решение, и оно могло бы быть нормальным, за исключением того, что я беспокоюсь о размере и изменении размера главного окна. Думаю, я мог бы связать это вместе, чтобы исправить это. - person Ingó Vals; 15.07.2010