【问题标题】:AvalonDock ILayoutUpdateStrategy example needed需要 AvalonDock ILayoutUpdateStrategy 示例
【发布时间】:2016-02-11 09:34:49
【问题描述】:

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

我的 Window 的 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)
        {

        }

【问题讨论】:

    标签: c# wpf avalondock


    【解决方案1】:

    找到答案:

    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;
    
        }
    

    【讨论】:

    • 什么激活了 LayoutUpdateStrategy,因为我没有使用 LayoutItemTemplateSelector 也没有 LayoutItemContainerStyleSelector。需要这些吗?我正在向 LayoutAnchorable.Content 添加一个 UserControl。
    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 2017-03-18
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2015-12-19
    • 2012-07-17
    • 2013-07-04
    相关资源
    最近更新 更多