2010-01-29 2 views
1

WPF를 처음 사용하고 확장기를 사용하여 드롭 다운 메뉴를 작성하려고합니다. 페이지 레이아웃은 Grid으로 처리됩니다.현재 행을 확장하지 않고 WPF GridRow 내용을 다음 행으로 확장하는 방법

익스텐더는 그리드의 첫 번째 행 안에 있으며 클릭하면 확장기의 내용이 아래의 모든 내용 상단으로 확장됩니다. 안타깝게도 현재 전체 행이 펼쳐져 확장 된 컨트롤의 높이를 수용합니다.

ZIndexExpander인데 놀아 보았지만 효과가없는 것 같습니다. 상관없이 행은 항상 페이지의 다른 모든 항목을 강제로 확장하여 이동시킵니다.

<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> 

그리드가 왜곡되지 않고 후속 행의 '위에서'확장되도록하려면 어떻게해야합니까?

답변

1

ExpanderGrid.RowSpan2 (또는 펼칠 때 확장하려는 행 수)으로 설정하면 어떻게됩니까?

그래서, 두 행 그리드,이 같은이있을 것이다 :

<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 부분을 조정해야 할 수 있지만, , 나는 이것이 효과가있을 것이라고 생각한다.

+0

확대기가 열려있는 동안 열의 모든 항목을 한 행 아래로 내리지 않습니까? –

+0

@ 로버트, 안됩니다. 이것이 바로 Grid.RowSpan = "2"'의 핵심입니다. 그것은 객체를'Grid'의 두 행을 차지하게합니다. 그리드의 높이를 헤더의 높이로 설정하면 익스팬더를 열 때 모든 오버플로 (열린 상태의 항목)가 두 번째 행으로 이동합니다. – devuxer

+0

@ 로버트, 방금 내 대답을 약간 수정했습니다. 나는 Z-order가 XAML에 무엇을 넣는가에 달려 있다고 생각한다. (당신이 원한다면 아마도 그것을 오버라이드 할 수 있을지 모르겠다.) 그래서 확장기 앞에'WhateverGoesInRow2'를 넣는다. 이렇게하면 확장자가 열려있을 때 다른 항목 위에 표시됩니다. – devuxer

0

기본 제공 드롭 다운 컨트롤은 기본 컨트롤 템플릿에서 팝업 컨트롤을 사용하여 비슷한 작업을 수행합니다.

1

그리드 내에서 팝업되지 않고 그리드 내에서 확장되는 것이 필요합니다. A ComboBox, 또는 - 이것은 결국 메뉴이므로 ContextMenu입니다.

당신은 또한 ToggleButtonPopup의 조합을 만들 수 있지만, 본질적으로 IsEditableComboBox 같은 일이이 꺼져.

관련 문제