как расширить WPF GridRow Contents в следующую строку без расширения текущей строки - PullRequest
1 голос
/ 29 января 2010

Я новичок в WPF и пытаюсь создать выпадающее меню, используя расширитель. Макет страницы обрабатывается с помощью Grid.

Расширитель расположен в первом ряду сетки, и я бы хотел, чтобы содержимое расширителя расширялось поверх содержимого всего нижеприведенного при нажатии. К сожалению, сейчас весь ряд расширен, чтобы вместить высоту расширенного элемента управления.

Я пытался поиграться с ZIndex из Expander, но, похоже, это не дало никакого эффекта. Несмотря ни на что, строка всегда расширяется, заставляя двигаться все остальное на странице.

<Expander FontSize="18" Name="moduleSelect" Width="100" Header=" Goto -> " 
          Background="#000033" MouseEnter="moduleSelect_MouseEnter" 
          MouseLeave="moduleSelect_MouseLeave" Foreground="White"
          Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="1" HorizontalAlignment="Left">
    <StackPanel>
        <Button Name="btnTasks" Width="100" Foreground="White"
                Background="#000033">Tasks</Button>
        <Button Name="btnNotes" Width="100" Foreground="White"
                Background="#000033">Notes</Button>
    </StackPanel>
</Expander>

Как сделать так, чтобы это развернулось «над» последующими строками без искажения сетки?

Ответы [ 3 ]

1 голос
/ 29 января 2010

Что произойдет, если вы установите Grid.RowSpan из Expander в 2 (или сколько строк вы бы хотели, чтобы оно расширялось при расширении)?

Итак, для сетки с двумя рядами у вас будет что-то вроде этого:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="30" /> <!--set this to the height of the expander's header area-->
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <WhateverGoesInRow2 Grid.Row="1" />
    <Expander FontSize="18" Name="moduleSelect" Width="100" Header=" Goto -> " 
        Background="#000033" MouseEnter="moduleSelect_MouseEnter" 
        MouseLeave="moduleSelect_MouseLeave" Foreground="White"
        Grid.Column="0" Grid.ColumnSpan="3" HorizontalAlignment="Left"
        Grid.Row=0 Grid.RowSpan="2">
        <StackPanel>
            <Button Name="btnTasks" Width="100" Foreground="White" Background="#000033">Tasks</Button>
            <Button Name="btnNotes" Width="100" Foreground="White" Background="#000033">Notes</Button>
        </StackPanel>
    </Expander>
</Grid>

Возможно, вам придется настроить раздел RowDefinition для вашей конкретной ситуации, но если я правильно понимаю вашу проблему, думаю, это сработает.

1 голос
/ 30 января 2010

Вы хотите что-то, что всплывает над сеткой, а не расширяется в сетке. A ComboBox, скажем, или - это меню, в конце концов - ContextMenu.

Вы также можете построить некоторую комбинацию ToggleButton и Popup, но это по сути то же самое, что и ComboBox с IsEditable выключенным.

0 голосов
/ 29 января 2010

Встроенный раскрывающийся элемент управления использует всплывающий элемент управления в своем шаблоне элемента управления по умолчанию для выполнения аналогичных действий.

...