因此,我查看了标有dockpanel-suite的现有答案,但未找到我要查找的内容(因为我输入此内容时,它也没有出现在“类似问题”区域中)。 对于初学者,请注意我并不是要求保存和恢复整个工作区。
所以这是场景。我有一个图形窗口(我们称之为“时间轴”),根据用户请求添加。添加后,它会自动停靠在主窗体的最底部区域。然后,用户使用时间轴窗口并将其重新锁定到其他位置(可以停靠在边缘或其他停靠窗格内)并更改其对接行为(浮动,自动隐藏,选项卡等)。
可演示的示例在Visual Studio中。如果您在右侧的停靠窗格中的选项卡上有解决方案资源管理器并关闭解决方案资源管理器,则可以转到查看 - >解决方案资源管理器并将其重新启动,然后将其恢复到正确的位置。
现在,用户通过点击其窗格中的 [x] 完全关闭时间轴窗口,并且将来,他们会再次请求将其添加到应用程序中。我想把它带回最后一个停靠状态,并在最后一次关闭时将它放在原位。
现在,我似乎能够通过ContentRemoved
事件来关闭窗格,但e.Content.DockHandler.Pane,
e.Content.DockHandler.PanelPane
和e.Content.DockHandler.FloatPane
都是{{1}所以我没有明显的方法来获得以前的dock几何体。 null
有效,但它是父/根对接面板,并且调用e.Content.DockHandler.DockPanel
对我没有任何作用,因为它会获得整个工作区。
即使我能够在这里捕获它,我需要的信息。但是,我似乎无法简单地在任何内容上调用SaveAsXml(...)
。
如果我在将LoadFromXml(...)
对象添加到DockContent
之前尝试执行此操作,DockPanel
成员为空,那么我似乎无法将XML还原到其中,甚至如果我能得到它。
DockHandler.DockPanel
没有其他事件似乎能够帮助我。
那么 - 有没有办法做到这一点,正确的方法是什么?我想确保我没有咆哮错误的树,试图在关闭时将停靠信息捕获为XML并稍后恢复。
我已经玩弄了没有实际关闭窗户的想法,只是解开并隐藏它,但还没有探索到那么远。与挂钩DockPanel
事件相同,但似乎没有触发停靠/浮动等的DockChanged
对象。我不确定为什么。
此外,解决方案需要足够强大,以便我能够正确处理诸如最后一个停靠父级不再存在的情况。例如,如果它在某处停靠为选项卡,但现在父窗口(包含选项卡)也已关闭。我不知道DockContent
是否认为这是正确的方法,是否足够强大以处理这种情况,因为我还没有能够测试它。
答案 0 :(得分:0)
如果我理解了这个问题,我所做的就是捕获Closing或FormClosing事件,.Hide()表单并设置e.Cancel = true。如果您正在使用DockContent,那么有一个HideOnClose()可以为您完成工作。那么当你想要重新开放时#34;在窗口中,您只需使用一个空的.Show(),它将显示在您关闭时的位置"它。 至于保存,如果最后一个对接父母不再存在,我同意Lex Li,这将是一个黑客。