2012-10-26 42 views
1

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

+0

请分享一些代码。 –

+0

我们正在做基本相同的事情 - 我们有打开弹出式窗口的按钮,有时包含打开嵌套弹出式窗口的按钮。如果两个弹出窗口都有StaysOpen =“false”,则单击/触摸将停止工作,并且当您在父弹出窗口中单击时,嵌套弹出窗口不会关闭。有时我们的应用程序也完全停止处理点击/触摸。如果父级弹出窗口的StaysOpen =“true”,它就可以工作。 – Valerie

回答

1

我有同样的问题。我们在我们的wpf控制库中有一个自定义DropDownSubsetSelector控件。此控件在其控制模板中有Popup,其中StaysOpen="False"。今天,我不得不把这个控件放在一个自定义视图中,该视图位于wpf的Popup控件中,并且被StaysOpen="False"控制,并且想知道这个意外嵌套的Popup的行为。我的这个问题的解决方法是检查微软的经典ComboBox控件的源代码。你可以在这里找到它Combobox Source。您可以看到它在Popup控件上的行为与您期望的Popup位于另一个Popup上的行为完全相同,并且它的模板具有弹出窗口(可选项目的下拉列表)。

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