我怎样才能使一个窗口像一个上下文菜单

本文关键字:一个 窗口 上下文 菜单 | 更新日期: 2023-09-27 18:12:55

我正在尝试建立一个全新的窗口作为上下文菜单。

我唯一的问题是:当我按下窗口外的鼠标按钮(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)。

我曾尝试使用http://www.hardcodet.net/taskbar,但我发现的例子不像我正在寻找的东西。

我怎样才能使一个窗口像一个上下文菜单

看起来你需要处理全局鼠标钩子。

这个问题有一个很好的解决方案

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

控件无法检测超出其边界Rectangle s的鼠标点击。然而,Window可以在其边界内的任何地方检测到鼠标点击。因此,您所需要做的就是在MainWindow.xaml.cs文件中处理PreviewMouseDown事件,然后在每次事件引发时向相关控件传递消息。

我相信你会想使用鼠标。捕捉,以检测点击远离您的窗口。

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

如何使用CaptureMouse或Mouse。捕获在我的c# WPF应用程序?