使WPF窗口的行为类似于上下文菜单(正确显示/隐藏)

时间:2008-12-11 21:28:15

标签: c# .net wpf winapi

我想创建一个行为类似于上下文菜单的WPF窗口。

所以,例如 - 当我展示wpf窗口时,我希望它是最顶层的窗口,从那里开始,如果用户点击该窗口之外的任何内容,我希望窗口再次被隐藏。

到目前为止,我已经尝试了很多技术,但是我发现这种技术中唯一有用的技术在这里展示了。它是第一次运作,但在此之后再也没有:

public TheWindow()
{
    InitializeComponent();
    this.Topmost = true;
}

void ShowMe()
{
    this.Show();
    this.CaptureMouse();
}

void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
    /// TODO: Check if they clicked outside the window here!
    this.ReleaseMouseCapture();
    this.Hide();
}

我也尝试过处理Deactivated事件,但它也只是出于某种原因才第一次使用。

2 个答案:

答案 0 :(得分:4)

PopUp不足以满足您的需求吗?它有一个StaysOpen属性,可以像你描述的那样表现。

答案 1 :(得分:1)

不知道这会有多大帮助,但是如果你不一定需要一个Window,我使用的一种技术就是将一个UserControl放在一个Window中。

根据条件的不同,您将显示上下文菜单。在菜单中我放置了一个菜单项,在里面放置了用户控件。它的行为与您想要的完全一样。您可以在屏幕上的任何位置显示上下文菜单,并在其边界外单击将关闭它。

请参阅:http://andyonwpf.blogspot.com/2006/10/dropdownbuttons-in-wpf.html 有关如何在屏幕上的任何位置显示上下文菜单的示例。此外,您需要覆盖MenuItem的默认模板,以便鼠标悬停在菜单项上不会突出显示它。