我正在开发一个自定义控件,它有一个打开弹出窗口的按钮。 当该弹出窗口包含我的自定义控件的另一个实例(其还具有打开另一个弹出窗口的按钮,例如日历)时,会出现一些问题。 第二个(嵌套)弹出窗口不会被怀疑。当父弹出窗口关闭时,单击不起作用,不会关闭。 使用嵌套弹出窗口时是否有任何特定的最佳实践?
答案 0 :(得分:1)
我有同样的问题。我们的wpf控件库中有一个自定义DropDownSubsetSelector
控件。此控件在其控件模板中有Popup
StaysOpen="False"
。今天,我必须将此控件放在位于wpf的Popup
控件内的自定义视图中StaysOpen="False"
,并且想知道这种意外的嵌套Popup
行为。我对此问题的解决方法是检查Microsoft的经典ComboBox
控件的源代码。你可以在Combobox Source找到它。您可以看到Popup
控件上的行为与Popup
位于另一个Popup
上的行为完全相同,而且它的模板内部有Popup(可选择下拉列表)项目)。
您必须订阅活动MouseDownEvent
和LostMouseCaptureEvent
并处理鼠标捕获,以正确处理MouseDownEvent
控制区域之外的Popup
。检查并复制嵌套ExtendedPopup
的一些源代码。您可以从经典Popup
继承它。