Многократное использование MenuItems объявлено один раз (WPF) - PullRequest
0 голосов
/ 16 июня 2010

Возможно ли в WPF определить некоторую структуру меню и использовать ее в нескольких контекстах? Например, я хотел бы использовать набор элементов меню из ресурсов в ContextMenu, меню Window и панели инструментов (панель инструментов только с иконками, без заголовков). Таким образом, порядок элементов, команды, значки, разделители должны быть определены только один раз.

Я ищу что-то вроде этого:

Декларация в ресурсах:

<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 Ответ

1 голос
/ 16 июня 2010

Вы можете сделать это так - создать пользовательский элемент управления и использовать его повторно - другой не будет работать, так как 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>

Надеюсь, это поможет.

...