2012-03-27 39 views
0

我有2个ContextMenus,第二个是从第一个调用的。问题2 ContextMenus

处理程序用于第一(第二创建):

private void MenuItem_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     MenuItem mI = (MenuItem)sender; 

     if (mI.Header.ToString() == "England") 
     { 
      cM.Items.Clear(); 
      cM.Items.Add(new MenuItem() { Header = "Barclays PL" }); 
      cM.Items.Add(new MenuItem() { Header = "Championship" }); 
      cM.Items.Add(new MenuItem() { Header = "League 1" }); 
      cM.Items.Add(new MenuItem() { Header = "League 2" }); 
      cM.Items.Add(new MenuItem() { Header = "Conference" }); 
      cM.Tap += MenuItem_Tap1; 
      //if (cM.Parent == null) 
      //{ 
       cM.IsOpen = true; 
      //} 
     } 
    } 

处理程序为第二:

 private void MenuItem_Tap1(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     MenuItem mI1 = (MenuItem)sender; 
     if (mI.Header.ToString() == "Barclays PL") 
      this.NavigationService.Navigate(new Uri("/pEng.xaml", UriKind.Relative)); 
    } 

但有System.InvalidCastException在第二处理程序(菜单项MI1 =(菜单项)发送方)。

请帮帮我,怎么了?

+0

什么是发件人的类型? (将鼠标悬停在其上并查看类型) – 2012-03-27 20:17:32

+0

ContextMenu。在第一种情况下,好的 – 2012-03-27 20:20:05

回答

2

你安装的MenuItem_Tap1事件处理程序ContextMenuTap事件,而不是每个MenuItemTap事件。试试这个:

cM.Items.Clear(); 
cM.Items.Add(new MenuItem() { Header = "Barclays PL" }); 
cM.Items.Add(new MenuItem() { Header = "Championship" }); 
cM.Items.Add(new MenuItem() { Header = "League 1" }); 
cM.Items.Add(new MenuItem() { Header = "League 2" }); 
cM.Items.Add(new MenuItem() { Header = "Conference" }); 

foreach(var item in cM.Items) { 
    ((MenuItem)item).Tap += MenuItem_Tap1; 
} 
1

您正在将您的Click活动附加到ContextMenu以及代码和您的评论中,显然您想将其附加到MenuItem