2010-06-16 3 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> 

Code-за 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 или один из его объединенных словарей. Пользовательский элемент управления, который есть у вас здесь, не имеет возможности добавлять контент, когда он используется. Пользовательский контроль делает. Пользовательский контроль также более эффективен несколькими способами. Просто FYI. Ваш ответ хороший. –

+0

Вы, конечно, правы. Я был неряшлив :-) Я отредактировал свой ответ, чтобы отразить это. – Goblin

 Смежные вопросы

  • Нет связанных вопросов^_^