c# - 需要 AvalonDock ILayoutUpdateStrategy 示例

标签 c# wpf avalondock

到目前为止,我主要使用EdiAvalonDockMVVM了解 AvalonDock 的工作原理,但都没有提供如何在我的应用程序中使用 ILayoutUpdateStrategy 的详细示例。

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

<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”的 LayoutItems 应该放在“DockLeft”内,带有模板“ToolBoxTemplate”的 LayoutItems 应该放在“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)
        {

        }

最佳答案

找到答案:

BeforeInsertAnchorable 需要看这条线:

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;

    }

关于c# - 需要 AvalonDock ILayoutUpdateStrategy 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35335465/

相关文章:

WPF ComboBox.Selected 附加事件。存在还是不存在?

avalondock - 如何使用 AvalonDock 并排放置两个 LayoutDocuments

c# - AvalonDock - 防止可锚定 Pane 停靠在文档 Pane 中

wpf - 阿瓦隆码头 : Programmatically undock DocumentContents of DocumentPan

c# - 以XML存储实体,使用MVVM在WPF应用程序中进行读写

c# - 单击按钮选择文本框中的所有内容

c# - 使用基类并拥有从其继承的类

c# - 在 C# 中解析动态 SQL 并绑定(bind)到 ASP.Net MVC 中的 WebGrid

c# - 使用 MySQL 数据填充 ArrayList

C# 定义使用反射创建的泛型的长度