我正在开发一个自定义控件,该控件具有打开弹出窗口的按钮。 当该弹出窗口包含我的自定义控件的另一个实例(该实例也有一个打开另一个弹出窗口的按钮,例如日历)时,会出现一些问题。 第二个(嵌套)弹出窗口不会像可疑的那样运行。当父弹出窗口关闭时,点击不起作用,不会关闭。 使用嵌套弹出窗口时是否有任何特定的最佳实践?
我遇到了同样的问题。我们的 wpf 控件库中有一个自定义DropDownSubsetSelector
控件。此控件在其控件模板中具有Popup
,其中包含StaysOpen="False"
。今天,我不得不将此控件放在位于 wpf 带有StaysOpen="False"
的Popup
控件内的自定义视图上,并且对这种意外的嵌套Popup
行为感到好奇。我对此问题的解决方法是检查经典ComboBox
控件的源代码Microsoft。你可以在这里找到它 组合框源.如您所见,它在Popup
控件上的行为与您期望Popup
位于另一个Popup
上的行为完全相同,并且它的模板内部有弹出窗口(可选项目的下拉列表)。
您必须订阅事件MouseDownEvent
和LostMouseCaptureEvent
并处理鼠标捕获,以便正确处理控件区域之外Popup
MouseDownEvent
。检查并复制嵌套ExtendedPopup
的一些源代码。您可以从古典Popup
继承它。