2013-09-03 2 views
5

컨텍스트 메뉴가 xaml에서 "하드 코드 된"경우 하위 메뉴를 쉽게 추가 할 수 있습니다. 예를 들면 :는컨텍스트 메뉴의 WPF 하위 메뉴

<ContextMenu> 
    <MenuItem Header="Comm1" Command="{Binding Blabla1}"> 
     <MenuItem Header="SubComm1" Command="{Binding Blabla2}"></MenuItem> 
    </MenuItem> 
    <MenuItem Command="Comm2"></MenuItem> 
    <MenuItem Command="Comm3"></MenuItem> 
</ContextMenu> 

이것은의 ContextMenu 세 요소 (COMM1, Comm2 및 COMM3)를 가지며 COMM1은 하위 SubComm1을 갖는 것을 의미한다.

내가 좀 더 유연 제의 ContextMenu 만든 :

<ContextMenu ItemsSource="{Binding ContextMenuItemsSource}"> 
    <ContextMenu.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="Header" Value="{Binding ContextMenuCommandHeader}"></Setter> 
      <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter> 
     </Style> 
    </ContextMenu.ItemContainerStyle> 
</ContextMenu> 

은 기본적으로 내가의 ContextMenu에있는 요소의 수에는 제한이 없습니다, 어떤 요소가 어떤 명령을 할 수 있습니다. ContextMenu 요소에 하위 메뉴를 추가하려면 어떻게해야합니까?

+0

트리 데이터 구조를 ItemsSource에 바인딩하고 데이터를 MenuItems로 변환하는 Converter를 사용하십시오. –

답변

10

중첩 수집에 MenuItem.ItemsSource을 설정할 수 있습니다. 그러면 모든 메뉴 항목에 대한 하위 메뉴가 생성됩니다. 이

<ContextMenu ItemsSource="{Binding ContextMenuItemsSource}"> 
    <ContextMenu.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="ItemsSource" Value="{Binding ContextMenuSubItems}"></Setter> 
      <Setter Property="Header" Value="{Binding ContextMenuCommandHeader}"></Setter> 
      <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter> 
     </Style> 
    </ContextMenu.ItemContainerStyle> 
</ContextMenu> 

마찬가지로 당신이 당신의 submenuitems 스타일을 위해 MenuItem.ItemContainerStyleMenuItem.ItemTemplate을 설정할 수 있습니다이 들어 당신의 MenuItem을 백업 모델은 submenuitems 모음이 있어야합니다.

관련 문제