none
如何为ContextMenu中的menuItem添加click事件处理函数? RRS feed

  • 问题

  • contextMenu中的menuitem是运行时动态添加的

    private void ContextMenuTaste_Opened(object sender, RoutedEventArgs e)

            {

                var cm = sender as ContextMenu;

                cm.ItemsSource = from item in AllDishes

                                 where item.类型编号 == "Taste"

                                 select item;

            }

     

    现在想为每个menuitem加上同一个click处理函数,代码如何编写.

    处理函数如何知道点击哪个menuitem?


    skytouch
    2011年6月26日 18:05

答案

  • @小欧 :) 你的方法是Winform的,对WPF不是很好

     

    @张宇田

    你的代码直接设置了一个ContextMenu的ItemsSource属性,也就是说这个ContextMenu会基于这个ItemsSource展开成多个MenuItem的。所以你的问题是如何获得这些MenuItem。

    你看下这个方法,是如何从一个ItemsControl里面遍历获得每一个Item的ItemContainer (对于ContextMenu,每一项的Container就是MenuItem) ItemsControl.ItemContainerGenerator.ContainerFromIndex 然后你就可以 加上同一个Click的Handler了。

     

    for (int i = 0; i<cm.Items.Count; i++)
    {
     MenuItem item = cm.ItemContainerGenerator.ContainerFromIndex(i) as MenuItem;
     item.Click += ...;
    }
    
    

    然后你在事件中,可以通过 e.OriginalSource 来知道谁被点击了。

     

     

    Sincerely,

     


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月27日 9:54
    版主

全部回复

  • 您好

    撰寫事件如下所示

    private void MenuClick(object sender, EventArgs e)
    {
      System.Windows.Forms.MenuItem clickedMenuItem = sender as System.Windows.Forms.MenuItem;
      if (clickedMenuItem != null)
      {
        // clickedMenuItem.Text
        locationButton.Text = clickedMenuItem.Text;
      }
    }
    

    在您動態添加 menuitem 時,順便將事件加入

    menuItem1.Click += new System.EventHandler(MenuClick);


     


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已标记为答案 张宇田 2011年6月28日 7:37
    • 取消答案标记 张宇田 2011年6月28日 7:37
    2011年6月27日 0:54
  • @小欧 :) 你的方法是Winform的,对WPF不是很好

     

    @张宇田

    你的代码直接设置了一个ContextMenu的ItemsSource属性,也就是说这个ContextMenu会基于这个ItemsSource展开成多个MenuItem的。所以你的问题是如何获得这些MenuItem。

    你看下这个方法,是如何从一个ItemsControl里面遍历获得每一个Item的ItemContainer (对于ContextMenu,每一项的Container就是MenuItem) ItemsControl.ItemContainerGenerator.ContainerFromIndex 然后你就可以 加上同一个Click的Handler了。

     

    for (int i = 0; i<cm.Items.Count; i++)
    {
     MenuItem item = cm.ItemContainerGenerator.ContainerFromIndex(i) as MenuItem;
     item.Click += ...;
    }
    
    

    然后你在事件中,可以通过 e.OriginalSource 来知道谁被点击了。

     

     

    Sincerely,

     


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月27日 9:54
    版主
  • 谢谢,非常好用
    skytouch
    2011年6月28日 5:39