2010-06-16 4 views
0

WPF에서 일부 메뉴 구조를 정의하고 다중 컨텍스트에서 사용할 수 있습니까? 예를 들어 ContextMenu, Window의 메뉴 및 ToolBar (머리글없이 아이콘 만있는 ToolBar)의 리소스에서 메뉴 항목 집합을 사용하고 싶습니다. 따라서 항목 순서, 명령, 아이콘, 구분 기호는 한 번만 정의해야합니다.한 번만 선언 된 MenuItems를 여러 번 사용 (WPF)

나는 이런 식으로 뭔가를 찾을 : 자원

선언 :

<MenuItem Command="MyCommands.CloneObject" 
      CommandParameter="{Binding SelectedObject}" Header="Clone"> 
    <MenuItem.Icon> 
     <Image Source="Images\Clone.png" Height="16" Width="16"></Image> 
    </MenuItem.Icon> 
</MenuItem> 
<MenuItem Command="MyCommands.RemoveCommand" 
      CommandParameter="{Binding SelectedObject}" Header="Remove"> 
    <MenuItem.Icon> 
     <Image Source="Images\Remove.png" Height="16" Width="16"></Image> 
    </MenuItem.Icon> 
</MenuItem> 
<Separator/> 
<MenuItem Command="MyCommands.CreateChild" 
      CommandParameter="{Binding SelectedObject}" Header="Create child"> 
    <MenuItem.Icon> 
     <Image Source="Images\Child.png" Height="16" Width="16"></Image> 
    </MenuItem.Icon> 
</MenuItem> 

사용법 :

<ToolBar MenuItems(?)="{Reference to set of items}" ShowText(?)="false" /> 

<ContextMenu MenuItems(?)="{Reference to set of items}" /> 

답변

1

당신은 이런 식으로 할 수 - 있도록 사용자 정의 컨트롤 그 사용 - 다른 UiElements의 경우에만 할 수있는 하나의 부모로 작동하지 않습니다

CustomMenu.xaml

<MenuItem x:Class="MyApplication.CustomMenu" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <MenuItem Command="MyCommands.CloneObject" 
      CommandParameter="{Binding SelectedObject}" Header="Clone"> 
     <MenuItem.Icon> 
      <Image Source="Images\Clone.png" Height="16" Width="16"></Image> 
     </MenuItem.Icon> 
    </MenuItem> 
    <MenuItem Command="MyCommands.RemoveCommand" 
      CommandParameter="{Binding SelectedObject}" Header="Remove"> 
     <MenuItem.Icon> 
      <Image Source="Images\Remove.png" Height="16" Width="16"></Image> 
     </MenuItem.Icon> 
    </MenuItem> 
    <Separator/> 
    <MenuItem Command="MyCommands.CreateChild" 
      CommandParameter="{Binding SelectedObject}" Header="Create child"> 
     <MenuItem.Icon> 
      <Image Source="Images\Child.png" Height="16" Width="16"></Image> 
     </MenuItem.Icon> 
    </MenuItem> 
</MenuItem> 

코드 숨김 CustomMenu.xaml.cs :

public partial class CustomMenu 
{ 
    public CustomMenu() 
    { 
     InitializeComponent(); 
    } 
} 

을 그리고 그것을 사용 xaml 같은이 :

<ToolBar> 
    <local:CustomMenu/> 
</ToolBar> 
<ContextMenu> 
    <local:CustomMenu/> 
</ContextMenu> 

희망이 도움이됩니다.

+0

이렇게하는 것이 좋습니다. 그건 그렇고, 여기서 쓴 것은 실제로 "사용자 정의 컨트롤"과 약간 다른 "사용자 정의 컨트롤"입니다. 사용자 지정 컨트롤에는 XAML 파일이없고 InitializeComponent 호출이 없습니다. 대신 DefaultStyleKey를 설정하고 Themes/Generic.xaml 또는 병합 된 사전 중 하나에 정의 된 스타일을 갖습니다. 여기에있는 사용자 정의 컨트롤에는 사용할 때 추가 된 콘텐트가 없습니다. 사용자 지정 컨트롤이 있습니다. 커스텀 컨트롤은 또한 여러면에서 더 강력합니다. 그냥 참고하시기 바랍니다. 당신의 대답은 좋은 것입니다. –

+0

물론 맞습니다. 나는 실수를했습니다 :-) 나는 이것을 반영하기 위해 답장을 편집했습니다. – Goblin

관련 문제