C# 菜单项根据索引单击事件

C# 菜单项根据索引单击事件,c#,wpf,menuitem,C#,Wpf,Menuitem,我有一个包含子菜单项的菜单项。单击其中一个菜单项时,将触发一个事件,并根据单击菜单项的索引执行操作。我见过这样的应用程序,但在那个些情况下,菜单项的名称不是索引。我想要这样的东西: private void MI_Click (object sender, RoutedEventArgs e) { MenuItem mnu = (MenuItem)e.OriginalSource; switch (mnu.Items.Index) // I know there is no s

我有一个包含子菜单项的菜单项。单击其中一个菜单项时,将触发一个事件,并根据单击菜单项的索引执行操作。我见过这样的应用程序,但在那个些情况下,菜单项的名称不是索引。我想要这样的东西:

private void MI_Click (object sender, RoutedEventArgs e)
{
    MenuItem mnu = (MenuItem)e.OriginalSource;

    switch (mnu.Items.Index) // I know there is no such thing
    {
        case 0: {// do something}
        case 1: {// do something}
        // and so on
    }
}
 <MenuItem Header="_Menu">
     <MenuItem Header="Menu1" Click="MenuItem_Click" Tag="1" />
     <MenuItem Header="Menu2" Click="MenuItem_Click" Tag="2" />
     <MenuItem Header="Menu3" Click="MenuItem_Click" Tag="3" />
 </MenuItem>

您可以尝试以下方法:

private void MI_Click (object sender, RoutedEventArgs e)
{
    MenuItem mnu = (MenuItem)e.OriginalSource;

    switch (mnu.Items.Index) // I know there is no such thing
    {
        case 0: {// do something}
        case 1: {// do something}
        // and so on
    }
}
 <MenuItem Header="_Menu">
     <MenuItem Header="Menu1" Click="MenuItem_Click" Tag="1" />
     <MenuItem Header="Menu2" Click="MenuItem_Click" Tag="2" />
     <MenuItem Header="Menu3" Click="MenuItem_Click" Tag="3" />
 </MenuItem>
编辑:

要更改已创建的
菜单项的
标记
,可以使用以下命令:

        int poz = 10;
        foreach (MenuItem menuItem in mi.Items)
        {
            menuItem.Tag = poz++;
        }

其中
mi
是父菜单的名称

您可以尝试以下操作:

private void MI_Click (object sender, RoutedEventArgs e)
{
    MenuItem mnu = (MenuItem)e.OriginalSource;

    switch (mnu.Items.Index) // I know there is no such thing
    {
        case 0: {// do something}
        case 1: {// do something}
        // and so on
    }
}
 <MenuItem Header="_Menu">
     <MenuItem Header="Menu1" Click="MenuItem_Click" Tag="1" />
     <MenuItem Header="Menu2" Click="MenuItem_Click" Tag="2" />
     <MenuItem Header="Menu3" Click="MenuItem_Click" Tag="3" />
 </MenuItem>
编辑:

要更改已创建的
菜单项的
标记
,可以使用以下命令:

        int poz = 10;
        foreach (MenuItem menuItem in mi.Items)
        {
            menuItem.Tag = poz++;
        }

其中
mi
是父菜单的名称

Nice,但我经常添加和删除菜单项。我可以在创建菜单项时设置它们的
标记
,但如何修改已创建菜单项的标记?目的是,添加新菜单项时,其标记为零,其他项的标记应移动1。您可以维护一个菜单项列表,其中标记为列表中的索引,插入新菜单项时更新列表中的标记。您可以告诉我如何更改已创建菜单项的标记吗。作为伪代码,类似于:
mi.Items[1].Tag=num
。不错,但我经常添加和删除菜单项。我可以在创建菜单项时设置它们的
标记
,但如何修改已创建菜单项的标记?目的是,添加新菜单项时,其标记为零,其他项的标记应移动1。您可以维护一个菜单项列表,其中标记为列表中的索引,插入新菜单项时更新列表中的标记。您可以告诉我如何更改已创建菜单项的标记吗。作为伪代码,类似于:
mi.Items[1].Tag=num
。为什么需要这个?您可以为每个项目创建单独的
单击
事件处理程序,或者如果使用
MVVM
,每个项目都可以有自己的
命令
绑定。因为我经常添加和删除菜单项。为什么需要这个?您可以为每个项目创建单独的
单击
事件处理程序,或者如果使用
MVVM
,每个项目都可以有自己的
命令
绑定。因为我经常添加和删除菜单项。