2012-03-25 90 views
0

我有一个菜单项有儿童菜单项。当其中一个菜单项被点击时,一个事件将被触发,并根据点击菜单项的索引执行一些操作。我见过这样的应用程序,但在这些情况下,菜单项的名称是标准而不是索引。我想是这样的:菜单项点击活动根据索引

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 
    } 
} 
+0

为什么需要这个名字?您可以为每个项目创建单独的“Click”事件处理程序,或者如果使用“MVVM”,则每个项目都可以拥有自己的“Command”绑定。 – 2012-03-25 16:04:06

+0

因为我经常添加和删除菜单项。 – Shibli 2012-03-25 16:04:56

回答

3

你可以尝试这样的事:

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

编辑:

要改变的Tag已经创建MenuItems你可以使用这个:

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

其中mi是父菜单

+0

不错,但我经常添加和删除菜单项。我可以在创建它们时设置它们的“标签”,但是如何修改已创建的菜单项的标签?意图是,随着新菜单项的添加,其标签为零,其他项目的标签应该偏移一个。 – Shibli 2012-03-25 16:03:16

+0

您可以维护一个菜单项列表,其中标签是列表中的索引,当插入新标签时将标签更新到列表中 – ionden 2012-03-25 16:08:39

+0

您可以告诉我如何更改已创建菜单项的标签。作为一个伪代码就像:'mi.Items [1] .Tag = num'。 – Shibli 2012-03-25 16:18:54