AvolonDock 找到所有布局

AvolonDock find all Layouts

我正在尝试了解如何使用 AvalonDock。 我不限于 MVVM,并且很高兴使用 code-behind WPF 进行以下工作。

我有以下方法可以打开一个新的 AvalonDock LayoutDocument 并向其中添加一个 WPF 用户控件。

在打开新 LayoutDocument 之前,该方法会检查新 LayoutDocument 的标题是否已存在于 LayoutDocumentPane

这似乎效果不错。

问题是,如果正在打开的 LayoutDocument 已经存在并且已经从 LayoutDocumentPane un-anchored 那么它不再存在于 LayoutDocumentPane.

如何搜索所有 LayoutDocument 而不管它们位于何处?

方法如下:

private void OpenWindow(string title, System.Windows.Controls.UserControl userControl)
    {
        var firstDocumentPane = dockManager.Layout.Descendents().OfType<LayoutDocumentPane>().FirstOrDefault();
        if (firstDocumentPane != null)
        {
            bool addChild = true;
            foreach (LayoutDocument child in LayoutDocumentPane.Children)
            {
                if (child.Title == title)
                {
                    child.IsSelected = true;
                    addChild = false;
                }
            }
            if (addChild == true)
            {
                LayoutDocument doc = new LayoutDocument();
                doc.Title = title;
                doc.Content = userControl;
                doc.IsSelected = true;
                firstDocumentPane.Children.Add(doc);
            }
        }
    }

我想通了。

下面将列出dockManager

中的所有LayoutDocument个文档
var currentContentsList = dockManager.Layout.Descendents().OfType<LayoutDocument>().ToArray();

然后循环如下:

foreach (LayoutDocument child in currentContentsList)
        {
             child.IsActive = true;
        }