如何使窗口像上下文菜单一样?

时间:2014-07-15 13:06:28

标签: c# .net wpf events

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

我唯一的问题是:当我按下窗口外的鼠标按钮(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,但我发现的例子并不像我想要的那样。

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我相信您会想要使用Mouse.Capture来检测远离您窗口的点击。

这个问题+答案可能会引导您朝着正确的方向前进:

How do I use CaptureMouse or Mouse.Capture in my C# WPF application?