ContextMenu菜单项在Click事件上连续添加



在点击事件中,我会返回将菜单项添加到上下文菜单。但在多次点击时,它会不断将菜单项增加到上下文菜单中。下面的代码我用在这里。

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

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

添加一个布尔数据成员,该成员将检查子菜单是否已添加

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

在按钮点击事件的启动中添加以下代码。

cMenu = new cMenu();

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

谢谢,

最新更新