菜单项单击事件根据索引

Posted

技术标签:

【中文标题】菜单项单击事件根据索引【英文标题】:Menu Item Click event According to Index 【发布时间】:2012-03-25 15:50:48 【问题描述】:

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

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
    

【问题讨论】:

为什么需要这个?您可以为每个项目创建单独的 Click 事件处理程序,或者如果使用 MVVM,每个项目都可以有自己的 Command 绑定。 因为我经常添加和删除菜单项。 【参考方案1】:

你可以试试这样的:

 <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 MenuItem_Click(object sender, RoutedEventArgs e)
    
        MenuItem mi = sender as MenuItem;
        if (mi != null)
        
            int tag;
            int.TryParse(mi.Tag.ToString(), out tag);
            switch (tag)
            
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
            
        
    

编辑:

要更改已创建的MenuItemsTag,您可以使用:

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

mi 是父菜单的名称

【讨论】:

很好,但我经常添加和删除菜单项。我可以在创建它们时设置它们的tag,但是如何修改已经创建的菜单项的标签?意图是,当一个新的菜单项被添加时,它的标签是零,其他项目的标签应该移动一个。 您可以维护一个菜单项列表,其中标签是列表中的索引,并在插入新的时更新列表中的标签 您能告诉我如何更改已创建菜单项的标签吗?作为伪代码类似于:mi.Items[1].Tag = num.

以上是关于菜单项单击事件根据索引的主要内容,如果未能解决你的问题,请参考以下文章

android:来自片段的菜单项单击事件

下拉菜单项中的 jquery 滑块导致太多事件

切换 div 并突出显示当前菜单项

QML - 通过点击事件显示菜单栏或菜单项

javafx中菜单上的单击事件

处理菜单项点击事件 - Android