1

我是 WPF 的新手,我正在尝试使用扩展器构建一个下拉菜单。页面布局正在使用Grid.

扩展器位于网格的第一行内,我希望扩展器的内容在单击时扩展到下面所有内容的顶部。不幸的是,现在,整行都被扩展以适应扩展控件的高度。

我尝试使用ZIndexof the ,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>

如何在不扭曲网格的情况下使其扩展“高于”后续行?

4

3 回答 3

1

如果您将 的 设置为Grid.RowSpan(或者您希望它在展开时跨越多少行)会发生什么?Expander2

所以,对于一个两行网格,你会有这样的东西:

<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针对您的特定情况调整您的部分,但如果我正确理解您的问题,我认为这会起作用。

于 2010-01-29T20:36:06.053 回答
1

您想要在网格上弹出的东西,而不是在网格内扩展。一个ComboBox,比如说,或者——毕竟这是一个菜单——一个ContextMenu

您也可以构建 aToggleButton和 a 的某种组合,但这与关闭Popupa 的情况基本相同。ComboBoxIsEditable

于 2010-01-29T22:02:02.967 回答
0

内置下拉控件在其默认控件模板中使用 Popup 控件来执行类似的操作。

于 2010-01-29T20:11:58.640 回答