gpt4 book ai didi

c# - 如何关闭在 WPF 中用作子菜单的弹出窗口

转载 作者:行者123 更新时间:2023-11-30 18:10:50 24 4
gpt4 key购买 nike

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

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

我尝试过的事情:

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

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

最佳答案

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

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

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

我希望这是唯一可以解决它的方法。

关于c# - 如何关闭在 WPF 中用作子菜单的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com