C# 如何使窗口像上下文菜单一样工作?

C# 如何使窗口像上下文菜单一样工作?,c#,.net,wpf,events,C#,.net,Wpf,Events,我试图建立一个全新的窗口作为上下文菜单 我唯一的问题是:当我在窗口(ContextMenu)外按下鼠标按钮时,窗口不会关闭。我找不到可以捕获此动作的事件 这是我现在使用的代码: public partial class ContextMenu : Window { public ContextMenu() { InitializeComponent(); this.ShowInTaskbar = false; this.Deacti

我试图建立一个全新的窗口作为上下文菜单

我唯一的问题是:当我在窗口(ContextMenu)外按下鼠标按钮时,窗口不会关闭。我找不到可以捕获此动作的事件

这是我现在使用的代码:

public partial class ContextMenu : Window
{
    public ContextMenu()
    {
        InitializeComponent();
        this.ShowInTaskbar = false;
        this.Deactivated += new EventHandler(ContextMenu_Deactivated);
    }

    void ContextMenu_Deactivated(object sender, EventArgs e)
    {
        this.Hide();
    }

    protected override void OnDeactivated(EventArgs e)
    {
        base.OnDeactivated(e);
        this.Hide();
    }

    protected override void OnMouseDown(MouseButtonEventArgs e)
    {
        base.OnMouseDown(e);
        this.Hide();            
    }

    protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e)
    {
        base.OnKeyDown(e);
        this.Hide();           
    }

    protected override void OnLostFocus(RoutedEventArgs e)
    {
        base.OnLostFocus(e);
        this.Hide();            
    }

}
以上功能中的任何一项都会捕捉到在窗口外按下鼠标(ContextMenu)


我尝试过使用,但我发现的示例与我正在寻找的不同。

看起来您需要处理全局鼠标挂钩

这是解决这个问题的好办法


控件无法检测到鼠标单击超出其边框的情况。但是,
窗口
可以在其边框内的任何位置检测到鼠标单击。因此,您需要做的就是在
main window.xaml.cs
文件中处理
PreviewMouseDown
事件,然后在每次引发事件时将消息传递给相关控件。

我相信您会希望使用鼠标。捕获来检测窗口之外的单击

这个问题+答案可能会引导您走向正确的方向:


您的表单上是否已将“KeyPreview”设置为True?我希望应用程序知道鼠标何时在窗口外按下,以便关闭窗口(如在关联菜单中)。你说我必须在与应用程序不同的窗口中按下鼠标?