【问题标题】:How to close Popups used as sub-menus in WPF如何关闭在 WPF 中用作子菜单的弹出窗口
【发布时间】:2009-05-15 17:54:14
【问题描述】:

我有一个按钮,点击它会打开一个弹出窗口。 Popup 是一个包含更多按钮的子菜单。单击子菜单上的按钮之一时,弹出窗口将关闭。当用户单击弹出窗口之外的某个位置时,我还希望弹出窗口关闭。还需要注意的是,大部分屏幕都由显示 OpenGL Win Forms 控件的 WindowsFormsHost 占据。

单击子菜单按钮时关闭弹出窗口我已经能够做到。在这些按钮的单击处理程序中,我关闭了弹出窗口。但是,在单击其他地方时关闭弹出窗口是我遇到问题的地方。

我尝试过的事情:

将 PopUp.StaysOpen 设置为 false。这样做的原因是,当单击屏幕上的其他位置时,弹出窗口会关闭。但是,在 Win Forms 控件上,似乎需要单击以关闭弹出窗口,然后再单击以执行任何操作。这是非常不可取的。

我尝试为打开弹出窗口的按钮处理 LostFocus 事件,并将 StaysOpen 设置为 true。这适用于单击弹出窗口不需要第二次单击 Win Forms 控件。现在的问题是处理了 LostFocus 事件,并且 Popup 在读取对 Popup 上的任何按钮的单击之前关闭。这使子菜单无法使用。

【问题讨论】:

    标签: c# wpf popup


    【解决方案1】:

    WPF 的焦点系统可能存在一些问题。 WPF 有自己的焦点系统,完全独立于 WinForms 和标准 Win32 窗口。

    在 WinForms 和 WPF 之间切换焦点时,我敢打赌有些事件没有正确触发。

    建议的解决方法是覆盖 WinForms 窗口的 WndProc 或 Click 事件,并在弹出窗口中手动将 IsOpen 设置为 false。

    我希望这是唯一能解决问题的方法。

    【讨论】:

      猜你喜欢
      • 2012-06-29
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      相关资源
      最近更新 更多