首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要AvalonDock ILayoutUpdateStrategy示例

需要AvalonDock ILayoutUpdateStrategy示例
EN

Stack Overflow用户
提问于 2016-02-11 09:34:49
回答 1查看 1.6K关注 0票数 2

到目前为止,我主要使用电子数据交换AvalonDockMVVM来学习AvalonDock是如何工作的,但都没有提供如何在应用程序中使用ILayoutUpdateStrategy的详细示例。

我的窗口的XAML看起来像这样:

代码语言:javascript
复制
<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“的WorkspaceExplorerTemplate应该放在"DockLeft”中,而带有"ToolBoxTemplate“模板的LayoutItems应该放在"DockRight”中。

这个是可能的吗?

我该怎么做?

我不期望有一个详细的解释,但一个链接到一个良好的文档示例将是很好的。

提前感谢

到目前为止,LayoutInitializer看起来如下:

代码语言:javascript
复制
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)
        {

        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-12 07:28:28

找到了答案:

BeforeInsertAnchorable需要查看这一行:

代码语言:javascript
复制
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;

    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35335465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档