C# 在AvalonDock中,我如何确定布局是否;“是脏的”;

C# 在AvalonDock中,我如何确定布局是否;“是脏的”;,c#,wpf,avalondock,C#,Wpf,Avalondock,我正在WPF应用程序中使用AvalonDock。我试图找到一个好方法来确定当前布局是否“脏”。“是脏的”我的意思是布局已经以任何方式改变,也就是说,停靠面板的宽度已经改变,面板的可见性已经改变,等等。基本上,我们希望加载一个命名的布局并将该布局标记为“脏的”,这样用户就可以收到警告,在应用程序关闭时保存其窗口的当前布局或放弃该布局 DocumentManager类具有LayoutChanged和LayoutChanged事件,但这些事件仅在加载新布局时才会触发——其目的似乎是在DocumentM

我正在WPF应用程序中使用AvalonDock。我试图找到一个好方法来确定当前布局是否“脏”。“是脏的”我的意思是布局已经以任何方式改变,也就是说,停靠面板的宽度已经改变,面板的可见性已经改变,等等。基本上,我们希望加载一个命名的布局并将该布局标记为“脏的”,这样用户就可以收到警告,在应用程序关闭时保存其窗口的当前布局或放弃该布局

DocumentManager类具有LayoutChanged和LayoutChanged事件,但这些事件仅在加载新布局时才会触发——其目的似乎是在DocumentManager的LayoutRoot关闭时通知用户


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

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

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

  • 用户调整任何AvalonDock
    Doc
    工具的大小
  • 用户隐藏/显示任何AvalonDock
    文档
    工具
  • 用户在任何AvalonDock
    Doc
    工具上的Fload/Dock操作
  • 要点2。三,。可以通过为所有AvalonDock
    文档
    工具
    ViewModel创建基类,并在
    FloatCommand
    HideCommand
    上处理“是脏的”标志来获得

    第一点。可以通过在包含所有
    文档
    工具
    用户控件的基本用户控件中放置
    网格
    ,并在其上放置链接到
    网格大小更改
    事件的
    行为
    来获得


    希望这对您有所帮助。

    谢谢您的建议。我制作了一个原型,它刚刚附加到用户控件的SizeChanged事件,但是您的建议遵循MVVM模式,所以我更喜欢将其作为解决方案。在浮动或停靠窗口时,我似乎总是会改变大小,但我不确定这是否保证总是发生。