菜单项单击事件根据索引
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;
编辑:
要更改已创建的MenuItems
的Tag
,您可以使用:
int poz = 10;
foreach (MenuItem menuItem in mi.Items)
menuItem.Tag = poz++;
mi
是父菜单的名称
【讨论】:
很好,但我经常添加和删除菜单项。我可以在创建它们时设置它们的tag
,但是如何修改已经创建的菜单项的标签?意图是,当一个新的菜单项被添加时,它的标签是零,其他项目的标签应该移动一个。
您可以维护一个菜单项列表,其中标签是列表中的索引,并在插入新的时更新列表中的标签
您能告诉我如何更改已创建菜单项的标签吗?作为伪代码类似于:mi.Items[1].Tag = num
.以上是关于菜单项单击事件根据索引的主要内容,如果未能解决你的问题,请参考以下文章