一次声明的MenuItem的多次使用(WPF)

时间:2010-06-16 10:32:20

标签: .net wpf menu contextmenu toolbar

WPF中是否可以定义一些菜单结构而不是在多个上下文中使用它?例如,我想在ContextMenu,Window的菜单和ToolBar(仅带图标的ToolBar,没有标题)中使用来自资源的一组菜单项。所以项目顺序,命令,图标,分隔符必须只定义一次。

我想找到这样的东西:

资源声明:

<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 个答案:

答案 0 :(得分: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-behind CustomMenu.xaml.cs:

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

然后在xaml中使用它:

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

希望这有帮助。