根据WPF中的情况自定义菜单

mag*_*gol 1 c# wpf xaml binding mvvm

如何根据WPF中的情况自定义菜单?我有一个带有基本菜单的主窗口.在这个窗口中,我可以加载不同的UserControls,然后我希望根据使用的用户控件,使用不同的菜单选项扩展菜单.

例:

Main menu:
File
   Open
   -
   MRU
   -
   Exit


For viewing of UserControl 1:
File
   Open
   Edit
   -
   MRU
   -
   Exit

For viewing of UserControl 2:
File
   Open
   Edit
   -
   MRU
   -
   Exit
View
   Show codes
   Show capital letters

In Editing
File
   Open
   Save
   Save as...
   -
   MRU
   -
   Exit
Edit
   Add
   Remove
   Move
   -
   Cancle Edit
Run Code Online (Sandbox Code Playgroud)

Rac*_*hel 5

我将菜单绑定到Collection,并在加载时让不同的UserControls更改Collection.

编辑 - 这是一个例子

您的主视图将包含这样的内容

<Menu ItemsSource="{Binding Path=CurrentUserControl.MenuItems}">
    <Menu.Resources>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Header" Value="{Binding MenuItemText}" />
            <Setter Property="Command" Value="{Binding MenuItemCommand}" />
            <Setter Property="CommandParameter" Value="{Binding MenuItemCommandParameter}" />
        </Style>
    </Menu.Resources>
</Menu>
Run Code Online (Sandbox Code Playgroud)

虽然每个UserControl都包含您想要显示的MenuItem的Collection属性

public class MenuItem
{
    public string MenuItemText {get; set;}
    public ICommand MenuItemCommand {get; set;}
    public object MenuItemCommandParameter {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

...

public ObservableCollection<MenuItem> MenuItems;
Run Code Online (Sandbox Code Playgroud)