C# 需要AvalonDock IlayoutUpdateStregy示例
到目前为止,我主要使用和来了解AvalonDock的工作原理,但都没有提供如何在我的应用程序中使用ILayoutUpdateStregy的详细示例 我的窗口的XAML看起来像这样:C# 需要AvalonDock IlayoutUpdateStregy示例,c#,wpf,avalondock,C#,Wpf,Avalondock,到目前为止,我主要使用和来了解AvalonDock的工作原理,但都没有提供如何在我的应用程序中使用ILayoutUpdateStregy的详细示例 我的窗口的XAML看起来像这样: <avalonDock:DockingManager.LayoutItemTemplateSelector> <pane:PanesTemplateSelector> <pane:PanesTemplateSelec
<avalonDock:DockingManager.LayoutItemTemplateSelector>
<pane:PanesTemplateSelector>
<pane:PanesTemplateSelector.WorkspaceExplorerTemplate>
<DataTemplate>
<v:WorkspaceExplorerView/>
</DataTemplate>
</pane:PanesTemplateSelector.WorkspaceExplorerTemplate>
<pane:PanesTemplateSelector.ToolBoxTemplate>
<DataTemplate>
<TextBlock>Test</TextBlock>
</DataTemplate>
</pane:PanesTemplateSelector.ToolBoxTemplate>
</pane:PanesTemplateSelector>
</avalonDock:DockingManager.LayoutItemTemplateSelector>
<avalonDock:DockingManager.LayoutUpdateStrategy>
<pane:LayoutInitializer/>
</avalonDock:DockingManager.LayoutUpdateStrategy>
<avalonDock:LayoutRoot>
<avalonDock:LayoutPanel Orientation="Horizontal">
<avalonDock:LayoutAnchorablePane Name="DockLeft" DockMinWidth="250"/>
<avalonDock:LayoutAnchorablePaneGroup>
<avalonDock:LayoutAnchorablePane Name="DockCenterTop" DockMinWidth="250"/>
<avalonDock:LayoutAnchorablePane Name="DockCenterBottom" DockMinWidth="250"/>
</avalonDock:LayoutAnchorablePaneGroup>
<avalonDock:LayoutAnchorablePane Name="DockRight" DockMinWidth="500"/>
</avalonDock:LayoutPanel>
</avalonDock:LayoutRoot>
试验
我想在LayoutInitializer中指定以下内容:
带有模板“WorkspaceExplorerTemplate”的布局项目应放在“DockLeft”中,带有模板“ToolBoxTemplate”的布局项目应放在“DockRight”中
这可能吗
我该怎么办
我不希望有详细的解释,但是链接到一个文档丰富的示例会很好
提前谢谢
到目前为止,LayoutInitializer如下所示:
class LayoutInitializer : ILayoutUpdateStrategy
{
public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer)
{
LayoutAnchorablePane destPane = destinationContainer as LayoutAnchorablePane;
if (destinationContainer != null &&
destinationContainer.FindParent<LayoutFloatingWindow>() != null)
return false;
var toolsPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "ToolsPane");
if (toolsPane != null)
{
toolsPane.Children.Add(anchorableToShow);
return true;
}
return false;
}
public void AfterInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableShown)
{
}
public bool BeforeInsertDocument(LayoutRoot layout, LayoutDocument anchorableToShow, ILayoutContainer destinationContainer)
{
return false;
}
public void AfterInsertDocument(LayoutRoot layout, LayoutDocument anchorableShown)
{
}
类布局初始化器:ILAyoutUpdateStregy
{
公共bool before insertanchorable(LayoutRoot布局、LayoutAnchorable锚点布局、ILayoutContainer destinationContainer)
{
LayoutAcholablePane destPane=作为LayoutAcholablePane的目的容器;
如果(destinationContainer!=空&&
destinationContainer.FindParent()!=null)
返回false;
var toolsPane=layout.degents().OfType().FirstOrDefault(d=>d.Name==“toolsPane”);
如果(toolsPane!=null)
{
toolsPane.Children.Add(锚点显示);
返回true;
}
返回false;
}
插入式锚具后的公共空隙(所示为LayoutRoot布局、LayoutChorable锚具)
{
}
插入文档之前的公共bool(LayoutRoot布局、LayoutDocument锚点显示、ILayoutContainer目标容器)
{
返回false;
}
插入文档后公共无效(LayoutRoot布局,LayoutDocument锚定显示)
{
}
找到了答案:
InsertAnchorable之前需要查看以下行:
public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer)
{
LayoutAnchorablePane destPane = destinationContainer as LayoutAnchorablePane;
if (destinationContainer != null &&
destinationContainer.FindParent<LayoutFloatingWindow>() != null)
return false;
var DockLeftPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "DockLeft");
if (DockLeftPane != null)
{
if(anchorableToShow.Content.GetType() == typeof(WorkspaceExplorerViewModel))
DockLeftPane.Children.Add(anchorableToShow);
return true;
}
return false;
}
public bool-before-insertanchorable(LayoutRoot布局、LayoutAnchorable-anchorableThow、ILayoutContainer-destinationContainer)
{
LayoutAcholablePane destPane=作为LayoutAcholablePane的目的容器;
如果(destinationContainer!=空&&
destinationContainer.FindParent()!=null)
返回false;
var DockLeftPane=layout.downents().OfType().FirstOrDefault(d=>d.Name==“DockLeft”);
if(DockLeftPane!=null)
{
if(anchorableToShow.Content.GetType()==typeof(WorkspaceExplorerServiceWModel))
DockLeftPane.Children.Add(锚定显示);
返回true;
}
返回false;
}
是什么激活了LayoutUpdateStregy,因为我没有使用LayoutItemTemplateSelector或LayoutItemContainerStyleSelector。是否需要这些?我正在LayoutAccorable.Content中添加一个用户控件。