2013-07-08 211 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(); 

這就是你需要創建一個新的實例。

感謝,