1

我正在开发一个自定义控件,它有一个打开弹出窗口的按钮。当该弹出窗口包含我的自定义控件的另一个实例(它也有一个打开另一个弹出窗口的按钮,例如日历)时,会出现一些问题。第二个(嵌套)弹出窗口不会被怀疑。当父弹出窗口关闭时,点击不起作用,不会关闭。使用嵌套弹出窗口时是否有任何特定的最佳实践?

4

1 回答 1

1

我遇到过同样的问题。DropDownSubsetSelector我们的 wpf 控件库中有一个自定义控件。此控件Popup在其控件模板中有一个带有StaysOpen="False". 今天,我不得不将此控件放在位于 wpfPopup控件内部的自定义视图上,StaysOpen="False"并且对这种意外Popup的嵌套行为感到好奇。我对这个问题的解决方法是检查微软的经典ComboBox控件的源代码。你可以在这里找到它Combobox Source。正如您所看到的,它在控件上的行为与您期望在另一个Popup控件上的行为完全相同,并且它的模板内部有 Popup(可选项目的下拉菜单)。PopupPopup

您必须订阅事件MouseDownEventLostMouseCaptureEvent处理鼠标捕获,以便正确处理控制区域MouseDownEvent之外的情况。Popup检查并复制一些源代码为您的嵌套ExtendedPopup. 您可以从 classic 继承它Popup

于 2014-04-03T17:23:56.813 回答