2013-07-08 167 views
0

,我已经返回向contextmenu添加菜单项,但是在多次点击时它不断添加菜单项到contextmenu。这里下面的代码正在使用它。ContextMenu MenuItems在点击事件上连续添加点击事件

<StackPanel Grid.Row="13" Orientation="Horizontal" FlowDirection="LeftToRight"> 
            <Button Name="btnMobile" Content="Home" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0 0 20 0" Width="70"></Button> 
            <!--<extToolkit:DropDownButton x:Name="ddBtnMobile" VerticalAlignment="Top" Width="30" HorizontalAlignment="Right" Margin="0 0 30 0" Height="20"/>--> 
            <Button HorizontalAlignment="Left" Name="ddBtnMobile" Width="30" Click="OnddBtnMobileClick" Margin="0,0,0,5" > 
             <Button.Content> 
              <Path x:Name="btnArrow3" Margin="4" VerticalAlignment="Center" Width="10" Fill="#FF527DB5" Stretch="Uniform" HorizontalAlignment="Right" Data="F1 M 301.14,-189.041L 311.57,-189.041L 306.355,-182.942L 301.14,-189.041 Z "/> 
             </Button.Content> 
             <Button.ContextMenu> 
              <ContextMenu Name="cMenu"> 

              </ContextMenu> 
             </Button.ContextMenu> 
            </Button> 
           </StackPanel> 

代码现在用的就是下面

 private void OnddBtnMobileClick(object sender, RoutedEventArgs e) 
       { 
        mnItem = new MenuItem(); 
        mnItem.Header ="B1"; 
        cMenu.Items.Add(mnItem); 
        mnItem = new MenuItem(); 
        mnItem.Header ="A1"; 
        cMenu.Items.Add(mnItem); 
        mnItem = new MenuItem(); 
        mnItem.Header="B 2"; 
        cMenu.Items.Add(mnItem); 
cMenu.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(OnMenuItemClick)); 
       } 

    private void OnMenuItemClick(object sender, RoutedEventArgs e) 
       { 
        RoutedEventArgs args = e as RoutedEventArgs; 
        MenuItem item = args.OriginalSource as MenuItem; 
        string header = item.Header.ToString(); 
        if (header == "Business") 
        { 
         btnMobile.Content = header; 
        } 
        else if (header == "Assistant") 
        { 
         btnMobile.Content = header; 
        } 

       } 

如何解决我的问题..是否有写上面的逻辑没有更好的办法。即在运行时添加上下文菜单的菜单项。

回答

0

添加一个布尔值数据成员将检查的是子菜单已添加

private void OnddBtnMobileClick(object sender, RoutedEventArgs e) 
{ 
    if(alreadyAdded == true) 
     return; 

    alreadyAdded = true; 
    mnItem = new MenuItem(); 
    mnItem.Header ="B1"; 
    cMenu.Items.Add(mnItem); 
    mnItem = new MenuItem(); 
    mnItem.Header ="A1"; 
    cMenu.Items.Add(mnItem); 
    mnItem = new MenuItem(); 
    mnItem.Header="B 2"; 
    cMenu.Items.Add(mnItem); 
    cMenu.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(OnMenuItemClick)); 
} 
+0

感谢您的答复...我有一个更怀疑...... OnMenuItemClick事件处理程序如何可以识别特定的btnmname ...因为我想为3个按钮使用相同的方法和事件处理程序。可以向我建议任何想法..要做到这一点? – kida

+0

@kida发件人对象是点击的按钮,你可以将它转换为Button并检查其名称 – makc

0

在按钮点击事件的开始处添加以下代码。

cMenu = new cMenu(); 

这就是你需要创建一个新的实例。

感谢,