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}" />
答案 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>
希望这有帮助。