以下类派生自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;
}
答案 0 :(得分:6)
答案 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