.net - 为什么单击其背景区域时 WPF 弹出窗口会关闭?

标签 .net wpf popup focus

我有一个 WPF Popup包含一些编辑控件(列表框、文本框、复选框)的控件,布局中有相当多的空白。
Popup.StaysOpen设置为 False ,这是必需的。如果用户单击应用程序中的其他位置,则应认为编辑操作已中止,弹出窗口应关闭。

不幸的是,每当用户在弹出窗口的背景区域(编辑控件之间的空间)内单击时,弹出窗口也会关闭。

我试过将弹出窗口设置为 Focusable .我还尝试将弹出窗口的 child (Border)设置为可聚焦。两方面都没有运气。

此外,鼠标事件似乎通过弹出窗口隧道。当我单击它时,弹出窗口下方的任何元素都会成为焦点。尽管 PopupBorder (我正在点击)同时拥有 IsHitTestVisibleFocusable设置为 true .

最佳答案

最后,我发现以下方法有效。鉴于...

<Popup x:Name="_popup"
       StaysOpen="False"
       PopupAnimation="Slide"
       AllowsTransparency="True">

...我在调用 InitializeComponent 后在构造函数中使用了这段代码...
// Ensure that any mouse event that gets through to the
// popup is considered handled, otherwise the popup would close
_popup.MouseDown += (s, e) => e.Handled = true;

关于.net - 为什么单击其背景区域时 WPF 弹出窗口会关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619798/

相关文章:

c# - RazorEngine Razor.Parse(...) 抛出有关 ServiceStack 和 Markdown 的异常?

asp.net - 引用.net标准类库时未找到System.Runtime程序集

c# - WPF 还是 GTK?哪一个更好

c# - HierarchicalDataTemplate 不适用于 UserControls

wpf - 适用于经典 WPF 桌面应用程序的 Windows 10/8 开始菜单磁贴图标大小

google-chrome - Tab键在Chrome扩展程序的弹出窗口中不起作用

twitter-bootstrap - 可以阻止 Bootstrap 模式吗?

c# - 如何将子元素作为解码字符串添加到 XElement?

.net - 为什么他们将 EventArgs 参数命名为 'e' ?

javascript - Python - selenium webdriver - 无法切换到注册弹出窗口