我正在WPF应用程序中使用AvalonDock。我试图找到一种确定当前布局是否“脏”的好方法。 “脏”是指布局以任何方式发生了变化,也就是说,停靠的面板的宽度发生了变化,面板的可见性发生了变化,等等。基本上,我们要加载命名的布局并将该标志标记为“脏” “,因此可以提醒用户保存其当前窗口布局,或在应用程序关闭时放弃该布局。
DocumentManager类具有LayoutChanged和LayoutChanging事件,但是这些事件仅在加载新的布局时才会触发-看来是要在DocumentManager的LayoutRoot被切换出时通知用户。
[我相信我可以通过简单地在Layout Pane祖先上订阅PropertyChanged事件来使用蛮力,但我希望有一个更优雅的解决方案。
据我所知,对于您对AvalonDock代码的要求,没有内置的解决方案。这意味着您必须像已经实现的那样手动进行操作。
为了实现您的目标,您需要监控:
Doc
或Tool
的大小Doc
或Tool
的用户隐藏/显示Doc
或Tool
上的用户的Fload / Dock操作[点2.和3.可能是通过为所有AvalonDock Docs
和Tools
ViewModel创建基类并处理FloatCommand
和HideCommand
上的“脏”标志而获得的。
要点1.可以通过在包含所有Grid
或Doc
UserControl的基本UserControl中放置Tool
并在其上放置与Behaviour
事件链接的Grid_SizeChanged
来获得。
希望对您有帮助。