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;
}
我正在尝试了解如何使用 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;
}