为什么ContextMenu(弹出菜单)不显示?

时间:2012-08-23 20:15:20

标签: c# wpf user-interface contextmenu popupmenu

以下类派生自System.Windows.Controls.UserControl。在所述类中,我调用OpenFileDialog来打开XAML文件(工作流文件)。接下来,我在右键单击鼠标时实现动态菜单。菜单没有显示。这是线程问题还是UI问题?在我的研究中,我一直无法找到解决方案。

提前致谢。

private void File_Open_Click(object sender, RoutedEventArgs e)
{
    var fileDialog = new OpenFileDialog();

    fileDialog.Title  = "Open Workflow";
    fileDialog.Filter = "Workflow| *.xaml";

    if (fileDialog.ShowDialog() == DialogResult.OK)
    {
        LoadWorkflow(fileDialog.FileName);
        MouseDown += new System.Windows.Input.MouseButtonEventHandler(mouseClickedResponse);
     }
}

private void mouseClickedResponse(object sender, System.Windows.Input.MouseEventArgs e)
{
    if (e.RightButton == MouseButtonState.Pressed)
    {
         LoadMenuItems();
    }
}

private void LoadMenuItems()
{
    System.Windows.Controls.ContextMenu contextmenu = new System.Windows.Controls.ContextMenu();   
    System.Windows.Controls.MenuItem item1 = new System.Windows.Controls.MenuItem();
    item1.Header = "A new Test";
    contextmenu.Items.Add(item1);
    this.ContextMenu = contextmenu;
    this.ContextMenu.Visibility = Visibility.Visible;
}

3 个答案:

答案 0 :(得分:6)

我自己遇到过这个问题,我用过这个:

ContextMenu.IsOpen = true;

MSDN Documentation on ContextMenu

答案 1 :(得分:0)

你必须调用ContextMenu的Show(Control, Point) 方法。 此外,我不会在每次单击控件时实例化新的上下文菜单,而是我会做类似的事情:

MyClass()
{
     // create the context menu in the constructor:

     this.ContextMenu = new System.Windows.Forms.ContextMenu();   
     System.Windows.Forms.MenuItem item1 = new System.Windows.Forms.MenuItem();
     item1.Text = "A new Test";
     this.ContextMenu.Items.Add(item1);
}


private void mouseClickedResponse(object sender, System.Windows.Input.MouseEventArgs e)
{
    if (e.RightButton == MouseButtonState.Pressed)
    {
          // show the context menu as soon as the right mouse button is pressed
          this.ContextMenu.Show(this, e.Location);
    }
}

答案 2 :(得分:-1)

我认为您需要致电contextMenu.Show