没有DocumentPane的{AvalonDock布局

时间:2016-04-13 14:44:30

标签: wpf avalondock

我正在尝试使用av​​alon dock创建一个看起来像这样的布局:

enter image description here

在左侧,用户应选择红色框中显示的内容。如果将中间的红色框声明为“文档”窗格,并且内容显示为选项卡,则可以轻松实现此类布局。 但是,在这种情况下不需要使用制表符,因为只有一个内容,所以我想将红色框显示为可锚定而不是文档。 所以,基本上,我想要一个根本不包含文档窗格的布局。 到目前为止,这是我的代码:

<ad:DockingManager               
    LayoutUpdateStrategy="{StaticResource dockingLayoutStrategy}" 
        AnchorablesSource="{Binding Path=Anchorables}" 
        ActiveContent="{Binding Path=ActiveContent, Mode=TwoWay}"
       >
<ad:DockingManager.LayoutItemContainerStyleSelector>
    <local:DockingPaneStyleSelector>
        <local:DockingPaneStyleSelector.AnchorableStyle>
            <Style TargetType="{x:Type adc:LayoutAnchorableItem}">
                <!-- a bunch of properties-->
            </Style>
        </local:DockingPaneStyleSelector.AnchorableStyle>
        <local:DockingPaneStyleSelector.PaneStyle>
            <!-- a bunch of properties-->
        </local:DockingPaneStyleSelector.PaneStyle>
    </local:DockingPaneStyleSelector>
</ad:DockingManager.LayoutItemContainerStyleSelector>

<adl:LayoutRoot>
    <adl:LayoutPanel Orientation="Horizontal">
        <adl:LayoutAnchorablePane  Name="ContentSelectionPane" DockWidth="100"/>
        <adl:LayoutPanel Orientation="Vertical" DockWidth="*" IsMaximized="True">
            <adl:LayoutPanel Orientation="Horizontal">
                <adl:LayoutAnchorablePane Name="MainPane" IsMaximized="True" />
                <adl:LayoutAnchorablePane Name="PropertyPane" DockWidth="300"/>
            </adl:LayoutPanel>

            <adl:LayoutAnchorablePane Name="StuffPane" DockHeight="150"/>
        </adl:LayoutPanel>
    </adl:LayoutPanel>
</adl:LayoutRoot>

我遇到的第一个问题是,当加载左窗格时,它占用了所有可用空间,并且它永远不允许显示右侧。如果我从左侧窗格中弹出,则会显示窗口的右侧。

第二个问题是窗格现在具有我声明的大小,但总是占用可用大小的一半。例如。如果我有:

    <adl:LayoutRoot>
    <adl:LayoutPanel Orientation="Horizontal">
        <adl:LayoutAnchorablePane  Name="ContentSelectionPane" DockWidth="100"/>
        <adl:LayoutAnchorablePane Name="{x:Static si:Panes.DocumentPane}" DockWidth="*" IsMaximized="True" />
    </adl:LayoutPanel>
</adl:LayoutRoot>

两个窗格都占据了可用地点的一半。

关于如何实现“DocumentPane”尺寸行为的任何想法都没有显示制表符,但是不能显示?

1 个答案:

答案 0 :(得分:2)

好吧,我有一个专业&#34; hack&#34;我做了哪些对我有用。我在容纳文档窗格的容器顶部设置了一个负的上边距。负边距将内容拉上来隐藏文档标签。

这很棘手,因为在渲染/加载内容后你必须这样做,因为Xaml窗格不是放入Visual Tree的实际视觉效果。

这是我的文档区域的Xaml:

<xcad:LayoutDocumentPane
    x:Name="LayoutDocumentPaneArea"
    CanRepositionItems="False"
    DockMinHeight="0"
    DockMinWidth="0"
    IsMaximized="True">
    <xcad:LayoutDocument
        CanClose="False"
        CanFloat="False"
        IsMaximized="True">
        <Grid x:Name="DocumentArea" />
    </xcad:LayoutDocument>
</xcad:LayoutDocumentPane>

然后在窗口的 Content_Rendered 事件中调用此函数来删除文档选项卡,在我的情况下,我在其中托管的内容的1px边框:

private void TrimDocumentArea()
{
    var border = DocumentArea.FindVisualAncestor<Border>();
    if (border != null)
    {
        border = border.FindVisualAncestor<Border>();
        if (border != null && border.Name == "ContentPanel")
        {
            border.Margin = new Thickness(-1, -21, -1, -1);
        }
    }
}