我在 Visual Studio 2010 中遇到了 WPF 设计时的奇怪行为:创建 Popup 类的实例后,我将 Visual Studio 中的代码选项卡切换到不同的文件,Popup 仍然保留在屏幕上!
我有一段代码,可以重现它,但我不确定是否应该将它粘贴在这里(它不是那么短),所以也许我会给出它的链接:here。
我在 Visual Studio 2010 中遇到了 WPF 设计时的奇怪行为:创建 Popup 类的实例后,我将 Visual Studio 中的代码选项卡切换到不同的文件,Popup 仍然保留在屏幕上!
我有一段代码,可以重现它,但我不确定是否应该将它粘贴在这里(它不是那么短),所以也许我会给出它的链接:here。
出于普通人无法理解的未知原因,Microsoft 已决定这是Popup
WPF 中类的默认行为。您必须自己实现“隐藏”逻辑。我建议处理包含 Popup 的 Window 的Window.LocationChanged
,Window.Activated
和Window.Deactivated
events 并自己关闭它。
编辑:为了澄清自己,您需要处理的 Window 事件是包含 PopupPlacementTarget
元素的窗口的事件。通常,当您创建一个弹出窗口时,您将其设置为相对于应用程序窗口中包含的某些元素(类似于工具提示的工作方式)。如果这是您的情况,那么我的解决方案是正确的,但我忘了提及有关 PlacementTarget 的这一点。
在你的代码后面;你可以简单地检查这个布尔值:
DesignerProperties.GetIsInDesignMode(this);
“this”表示包含弹出窗口的对象。例如窗口。
如果是真的,你可以说:
myPopUp.IsOpen = false;
对于商店应用程序/WinRT:
Windows.ApplicationModel.DesignMode.DesignModeEnabled