【问题标题】:Save and Restore Pane-Specific Information in DockPanelSuite在 DockPanelSuite 中保存和恢复特定于窗格的信息
【发布时间】:2015-10-07 14:39:54
【问题描述】:

因此,我查看了标有 的现有答案,但没有找到我要查找的内容(当我输入此内容时,它也没有出现在类似问题区域中)。 对于初学者,请注意我不是在询问保存和恢复整个工作区。

所以这是场景。我有一个根据用户请求添加的图形窗口(我们将其称为“时间轴”)。添加后,它会自动停靠在主窗体的最底部区域。然后,用户将时间轴窗口重新停靠在其他地方(可以停靠到边缘或另一个停靠窗格中)并更改其停靠行为(浮动、自动隐藏、选项卡等)。

Visual Studio 中有一个可演示的示例。如果您在右侧停靠窗格中的选项卡上有解决方案资源管理器并关闭解决方案资源管理器,您可以转到查看 -> 解决方案资源管理器并再次将其恢复,它会恢复到正确的位置。

现在用户通过点击其窗格上的 [x] 完全关闭时间轴窗口,并且在将来,他们请求再次将其添加到应用程序中。我想把它恢复到最后一个停靠状态并定位它最后一次关闭时的位置。

现在,我似乎能够通过 ContentRemoved 事件来捕捉窗格的关闭,但在那里 e.Content.DockHandler.Pane, e.Content.DockHandler.PanelPanee.Content.DockHandler.FloatPane 都是 null 所以我没有明显的方法来获得以前的码头几何形状。 e.Content.DockHandler.DockPanel 有效,但它是父/根停靠面板,调用 SaveAsXml(...) 对我没有任何作用,因为它会获得整个工作区。

即使我能够在这里捕捉到它,我需要的信息。但是,我似乎也无法在任何事情上简单地调用 LoadFromXml(...)

如果我在DockContent 对象添加到DockPanel 之前尝试这样做,DockHandler.DockPanel 成员为空,所以我似乎没有地方可以将 XML 恢复到,即使我能够得到它。

DockPanel 没有其他活动似乎可以帮助我。

那么 - 有没有办法做到这一点,正确的方法是什么?我想确保在关闭时尝试将停靠信息捕获为 XML 并在稍后恢复时,我不会在错误的树上吠叫。

我曾想过实际上不关闭窗口而只是取消停靠并隐藏它,但还没有探索那么远。与挂钩DockChanged 事件相同,但它似乎不会在停靠/浮动/等的DockContent 对象上触发。我不知道为什么。

此外,该解决方案需要足够强大,以便我能够正确处理诸如最后一个停靠父级不再存在等情况。例如,如果它作为选项卡停靠在某处,但现在该父窗口(包含选项卡)也已关闭。我不知道LoadFromXml, 假设它是正确的做法,是否足够强大以处理这种情况,因为我还没有能够测试它。

【问题讨论】:

  • 请求远远超出了 DPS 所能提供的范围。我认为你将不得不自己破解。一个提示是您的数据不能被默认 XML 持久化。您应该使用自己的文件来存储它们。

标签: dockpanel-suite dockpanel-suite


【解决方案1】:

如果我理解了这个问题,我所做的就是捕获 Closing 或 FormClosing 事件,.Hide() 表单并设置 e.Cancel = true。如果您使用的是 DockContent,那么有一个 HideOnClose() 可以为您完成工作。然后,当您想“重新打开”窗口时,只需使用一个空的 .Show(),它就会显示在您“关闭”它时的位置。 至于如果最后一个停靠父级不再存在则保存,我同意 Lex Li 的观点,这需要破解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多