在 AvalonDock 中,我如何确定布局 "is dirty"

In AvalonDock how can I determine if the layout "is dirty"

我在 WPF 应用程序中使用 AvalonDock。我正在尝试找到一种确定当前布局是否 "is dirty" 的好方法。 "is dirty" 我的意思是布局发生了任何变化,也就是说,停靠面板的宽度发生了变化,面板的可见性发生了变化等等。基本上,我们想要加载一个命名布局并将该布局标记为 "dirty" 这样可以提醒用户保存其 windows 的当前布局或在应用程序关闭时丢弃该布局。

DocumentManager class 具有 LayoutChanged 和 LayoutChanging 事件,但这些事件似乎仅在加载新布局时触发 - 其目的似乎是在 DocumentManager 的 LayoutRoot 被切换时通知用户.

我相信我可以通过简单地订阅布局窗格祖先上的 PropertyChanged 事件来使用暴力,但我希望有一个更优雅的解决方案。

据我所知,没有内置的解决方案可以满足您对AvalonDock代码的要求。 这意味着您必须手动完成,正如您已经实现的那样。

为了实现您的目标,您需要监控:

  1. 用户调整任何 AvalonDock 的大小 DocTool
  2. 任何 AvalonDock DocTool
  3. 的用户 Hide/Show
  4. 用户在任何 AvalonDock DocTool
  5. 上的 Fload/Dock 操作

第 2 点和第 3 点可以通过为所有 AvalonDock DocsTools ViewModel 创建一个基础 class 并处理您的 "is dirty" 标志来获得FloatCommandHideCommand.

第 1 点可以通过在包含所有 DocTool 用户控件的基本用户控件中放置一个 Grid 并在其上放置一个 Behaviour 来获得链接到 Grid_SizeChanged 事件。

希望对你有所帮助。