AvalonDock:如何使用 ILayoutUpdateStrategy 将文档与另一个文档一起添加
AvalonDock: How can I add a document alongside another using ILayoutUpdateStrategy
我已经使用此处的示例实现了 ILayoutupdateStrategy,但到目前为止,每个新的 LayoutDocument 始终放置在同一个 LayoutDocumentPane 中。我想自动将新的 LayoutDocument 添加到现有文档旁边。
我已经尝试创建一个新的 LayoutDocumentPaneGroup 并移动现有的 LayoutDocumentPane,并将新内容添加到该新组中,但是当我随后尝试将该组添加到布局结构中时,方法从未 return 和应用程序挂起。
LayoutDocumentPaneGroup newGroup = { a LayoutDocumentPaneGroup containing both the original sibling LayoutDocumentPane and the new content LayoutDocumentPane }
LayoutDocumentPaneGroup parent = { the parent group of the sibling document }
我试过类似的东西:
parent.RemoveChild(sibling);
parent.Children.Add( newGroup );
和
parent.Children.ReplaceChild( sibling, newGroup );
但他们似乎都依赖于这些方法。
我希望我完全以错误的方式处理这个问题,因此非常欢迎任何指点。
所以...事实证明,问题是您必须推迟将子项添加到正在添加的新文档组,直到 在它被放入布局树中之后。
- 创建一个新的 LayoutDocumentPaneGroup 以包含现有的
LayoutDocumentPane 和新的 LayoutDocument
- 新建一个LayoutDocumentPane来封装LayoutDocument
- 获取对同级 LayoutDocumentPane 父级(应该是 LayoutDocumentPaneGroup)的引用
- 用新的 PaneGroup 替换兄弟 LayoutDocumentPane 将兄弟和新布局文档添加到新组
示例代码
private void DockDocumentToBottom( LayoutDocumentPane sibling, LayoutDocument tobeDocked )
{
LayoutDocumentPaneGroup newGroup = new LayoutDocumentPaneGroup();
newGroup.Orientation = System.Windows.Controls.Orientation.Vertical;
LayoutDocumentPane newDocPane = new LayoutDocumentPane(tobeDocked);
LayoutDocumentPaneGroup siblingParent = sibling.Parent as LayoutDocumentPaneGroup;
if (siblingParent != null )
{
siblingParent.ReplaceChild(sibling, newGroup);
newGroup.Children.Add(sibling);
newGroup.Children.Add(newDocPane);
}
else
{
Debug.WriteLine("LayoutInitialiser: Failed to attach to a document pane group!");
}
}
我希望这对其他人有帮助!
我已经使用此处的示例实现了 ILayoutupdateStrategy,但到目前为止,每个新的 LayoutDocument 始终放置在同一个 LayoutDocumentPane 中。我想自动将新的 LayoutDocument 添加到现有文档旁边。
我已经尝试创建一个新的 LayoutDocumentPaneGroup 并移动现有的 LayoutDocumentPane,并将新内容添加到该新组中,但是当我随后尝试将该组添加到布局结构中时,方法从未 return 和应用程序挂起。
LayoutDocumentPaneGroup newGroup = { a LayoutDocumentPaneGroup containing both the original sibling LayoutDocumentPane and the new content LayoutDocumentPane }
LayoutDocumentPaneGroup parent = { the parent group of the sibling document }
我试过类似的东西:
parent.RemoveChild(sibling);
parent.Children.Add( newGroup );
和
parent.Children.ReplaceChild( sibling, newGroup );
但他们似乎都依赖于这些方法。
我希望我完全以错误的方式处理这个问题,因此非常欢迎任何指点。
所以...事实证明,问题是您必须推迟将子项添加到正在添加的新文档组,直到 在它被放入布局树中之后。
- 创建一个新的 LayoutDocumentPaneGroup 以包含现有的 LayoutDocumentPane 和新的 LayoutDocument
- 新建一个LayoutDocumentPane来封装LayoutDocument
- 获取对同级 LayoutDocumentPane 父级(应该是 LayoutDocumentPaneGroup)的引用
- 用新的 PaneGroup 替换兄弟 LayoutDocumentPane 将兄弟和新布局文档添加到新组
示例代码
private void DockDocumentToBottom( LayoutDocumentPane sibling, LayoutDocument tobeDocked )
{
LayoutDocumentPaneGroup newGroup = new LayoutDocumentPaneGroup();
newGroup.Orientation = System.Windows.Controls.Orientation.Vertical;
LayoutDocumentPane newDocPane = new LayoutDocumentPane(tobeDocked);
LayoutDocumentPaneGroup siblingParent = sibling.Parent as LayoutDocumentPaneGroup;
if (siblingParent != null )
{
siblingParent.ReplaceChild(sibling, newGroup);
newGroup.Children.Add(sibling);
newGroup.Children.Add(newDocPane);
}
else
{
Debug.WriteLine("LayoutInitialiser: Failed to attach to a document pane group!");
}
}
我希望这对其他人有帮助!