在 Avalondock 中,我如何通过 ConentId 找到 LayoutContent
In Avalondock, how I find a LayoutContent by ConentId
我有几个包含内容的窗格,它们都有自己的 ContentId。我希望能够找到其中一个窗格,以便将其设置为活动内容。我们称其为 MyContentView。在不同的视图中,我按下了一个按钮,它做了这样的事情:
LayoutContent content = FindContentById("myContent");
if(content == null)
{
content = new MyContentView();
content.ContentId = "myContent";
this.MyLayoutDocumentPane.Children.Add(content);
}
this.MyDockingManager.ActiveContent = content;
我不能只保留该内容,因为稍后我将序列化布局、关闭应用程序并在启动时反序列化。此代码不会 运行 并且我不会有该参考。
为什么不直接向下循环 MyLayoutDocument 窗格的子项? MyContentView 可以浮动,当发生这种情况时,它不再位于该容器中。
您可以枚举所有现有的 LayoutContent
项,无论它们位于哪个容器中,如下所示:
foreach (var lc in dockingManager.Layout.Descendents().OfType<LayoutContent>())
{ /* do something */ }
Descendents()
是包含在Xceed.Wpf.AvalonDock.Layout.Extensions
静态class中的扩展方法,所以你必须添加这个using
:
using Xceed.Wpf.AvalonDock.Layout;
我有几个包含内容的窗格,它们都有自己的 ContentId。我希望能够找到其中一个窗格,以便将其设置为活动内容。我们称其为 MyContentView。在不同的视图中,我按下了一个按钮,它做了这样的事情:
LayoutContent content = FindContentById("myContent");
if(content == null)
{
content = new MyContentView();
content.ContentId = "myContent";
this.MyLayoutDocumentPane.Children.Add(content);
}
this.MyDockingManager.ActiveContent = content;
我不能只保留该内容,因为稍后我将序列化布局、关闭应用程序并在启动时反序列化。此代码不会 运行 并且我不会有该参考。
为什么不直接向下循环 MyLayoutDocument 窗格的子项? MyContentView 可以浮动,当发生这种情况时,它不再位于该容器中。
您可以枚举所有现有的 LayoutContent
项,无论它们位于哪个容器中,如下所示:
foreach (var lc in dockingManager.Layout.Descendents().OfType<LayoutContent>())
{ /* do something */ }
Descendents()
是包含在Xceed.Wpf.AvalonDock.Layout.Extensions
静态class中的扩展方法,所以你必须添加这个using
:
using Xceed.Wpf.AvalonDock.Layout;