Dan*_*lba 6 .net c# wpf contextmenu
我正在从ContextMenu启动外部应用程序,我必须在目标应用程序运行时阻止源应用程序.为实现这一点,我Process.WaitForExit()用来避免源应用程序响应事件.
问题是上下文菜单仍然领先于目标应用程序.让我们看一个简单的例子:
这是我用于示例的代码.
public MainWindow()
{
InitializeComponent();
this.ContextMenu = new ContextMenu();
MenuItem menuItem1 = new MenuItem();
menuItem1.Header = "Launch notepad";
menuItem1.Click += MyMenuItem_Click;
this.ContextMenu.Items.Add(menuItem1);
}
void MyMenuItem_Click(object sender, RoutedEventArgs e)
{
Process p = new Process();
p.StartInfo.FileName = "notepad.exe";
p.StartInfo.CreateNoWindow = false;
p.Start();
p.WaitForExit();
p.Close();
}
Run Code Online (Sandbox Code Playgroud)
如何在显示目标应用程序之前使ContextMenu消失?
基于Jcl给出的伟大想法...
我找到了一个使用自定义菜单项的简单解决方案。它会延迟MenuItem.Click()事件直到父级ContextMenu关闭。
class MyMenuItem : MenuItem
{
protected override void OnClick()
{
ContextMenu parentContextMenu = Parent as ContextMenu;
parentContextMenu.Closed += ContextMenu_Closed;
parentContextMenu.IsOpen = false;
}
void ContextMenu_Closed(object sender, RoutedEventArgs e)
{
ContextMenu parent = Parent as ContextMenu;
parent.Closed -= ContextMenu_Closed;
base.OnClick();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |