Пункт меню Событие клика по индексу - PullRequest
0 голосов
/ 25 марта 2012

У меня есть пункт меню, который имеет дочерние пункты меню.При щелчке по одному из пунктов меню происходит событие и что-то происходит в соответствии с индексом выбранного пункта меню.Я видел такие приложения, но в тех случаях название пункта меню было критерием, а не индексом.Я хочу что-то вроде этого:

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

1 Ответ

3 голосов
/ 25 марта 2012

Вы можете попробовать что-то вроде этого:

 <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 - имя родительского меню

...