我正在尝试使用avalon dock创建一个看起来像这样的布局:
在左侧,用户应选择红色框中显示的内容。如果将中间的红色框声明为“文档”窗格,并且内容显示为选项卡,则可以轻松实现此类布局。 但是,在这种情况下不需要使用制表符,因为只有一个内容,所以我想将红色框显示为可锚定而不是文档。 所以,基本上,我想要一个根本不包含文档窗格的布局。 到目前为止,这是我的代码:
<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”尺寸行为的任何想法都没有显示制表符,但是不能显示?
答案 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);
}
}
}