动态 WPF 上下文菜单

dynamic WPF ContextMenu

我有 WPF 和动态上下文菜单。我有 menuitem1.click 和 menuitem2.click.

ContextMenu contextMenu = new ContextMenu();
MenuItem mItem1 = new MenuItem() { Header = "mItem1" };
mItem1.Click += new System.Windows.RoutedEventHandler(mItem1_Click);
MenuItem mItem2 = new MenuItem() { Header = "mItem2" };
mItem2.Click += new ystem.Windows.RoutedEventHandler(mItem2_Click);

现在当我打电话给

 private void mItem_Click(object sender, RoutedEventArgs e)
 {
    //need to put mItem1.enabled=false and mItem2.Enabled = false    

 }

我该怎么做?我应该使用 contextMenu.Items 什么东西吗? `

由于您是动态创建 MenuItem 对象,因此您可以使用两个私有字段保留对它们的引用。然后您可以直接在事件处理程序中访问它们:

public partial class MainWindow : Window
{
    MenuItem mItem1;
    MenuItem mItem2;

    public MainWindow()
    {
        InitializeComponent();

        ContextMenu contextMenu = new ContextMenu();
        mItem1 = new MenuItem() { Header = "mItem1" };
        mItem1.Click += new System.Windows.RoutedEventHandler(mItem1_Click);
        mItem2 = new MenuItem() { Header = "mItem2" };
        mItem2.Click += new System.Windows.RoutedEventHandler(mItem2_Click);
    }

    private void mItem1_Click(object sender, RoutedEventArgs e)
    {
        mItem1.IsEnabled = false;
    }

    private void mItem2_Click(object sender, RoutedEventArgs e)
    {

    }
}

另一种选择可能是使用匿名方法:

ContextMenu contextMenu = new ContextMenu();
MenuItem mItem1 = new MenuItem() { Header = "mItem1" };
MenuItem mItem2 = new MenuItem() { Header = "mItem2" };
mItem1.Click += (ss, ee) => 
{
    mItem2.IsEnabled = false;
};
mItem2.Click += (ss, ee) => 
{

};