【问题标题】:Make a WPF Window behave like a Context Menu (show/hide it properly)使 WPF 窗口的行为类似于上下文菜单(正确显示/隐藏它)
【发布时间】:2008-12-11 21:28:15
【问题描述】:

我想制作一个行为类似于上下文菜单的 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 事件,但由于某种原因它也只能在第一次工作。

【问题讨论】:

    标签: c# .net wpf winapi


    【解决方案1】:

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

    【讨论】:

    • 您将无法在该弹出窗口中设置焦点,也无法使用键盘在其中导航。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2021-07-23
      • 2017-12-16
      相关资源
      最近更新 更多