代码之家  ›  专栏  ›  技术社区  ›  magol Nathaniel Roark

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

  •  1
  • magol Nathaniel Roark  · 技术社区  · 14 年前

    我有一个带基本菜单的主窗口。在这个窗口中,我可以加载不同的用户控件,然后我希望根据使用的用户控件,用不同的菜单选项展开菜单。

    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
    
    5 回复  |  直到 13 年前
        1
  •  5
  •   Rachel    13 年前

    我会将菜单绑定到一个集合,并让不同的UserControls在加载时更改集合。

    编辑-下面是一个例子

    <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>
    

    而每个UserControl都将包含要显示的MenuItems的集合属性

    public class MenuItem
    {
        public string MenuItemText {get; set;}
        public ICommand MenuItemCommand {get; set;}
        public object MenuItemCommandParameter {get; set;}
    }
    

    ...

    public ObservableCollection<MenuItem> MenuItems;
    
        2
  •  1
  •   PawelSt    13 年前

    1

    <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System;assembly=mscorlib">
      <Grid Background="Transparent">
        <Grid.Resources>
            <x:Array Type="{x:Type sys:Object}" x:Key="extensions">
                <Separator />
                <MenuItem Header="Extension MenuItem 1" />
                <MenuItem Header="Extension MenuItem 2" />
                <MenuItem Header="Extension MenuItem 3" />
            </x:Array>
        </Grid.Resources>
        <Grid.ContextMenu>
            <ContextMenu>
                <ContextMenu.ItemsSource>
                    <CompositeCollection>
                        <MenuItem Header="Standard MenuItem 1" />
                        <MenuItem Header="Standard MenuItem 2" />
                        <MenuItem Header="Standard MenuItem 3" />
                        <CollectionContainer Collection="{StaticResource extensions}" />
                    </CompositeCollection>
                </ContextMenu.ItemsSource>
            </ContextMenu>
        </Grid.ContextMenu>
      </Grid>
    </Window>
    
        3
  •  0
  •   magol Nathaniel Roark    13 年前
        4
  •  0
  •   Captain Garforce    13 年前

    如何将某些菜单选项的可见性绑定到ViewModel中的布尔值,并使用IValueConverter在可见和折叠之间进行切换?

        5
  •  0
  •   CodeMouse92    13 年前