2012-12-06 84 views
0

如何在AvalonDock 2.0中的LayoutDocument底部创建制表符(在XAML中),如Visual Studio中的代码和设计选项卡? (当然,没有使用TabControl)在AvalonDock 2.0中的LayoutDocument底部创建选项卡?

我想最终在每个文档中有一个标签,但是在每个文档中都有一个标签,每个文档都可以有多个“视图”,每个标签有一个标签,在窗口的底部。

因此,您可能将“page.htm”作为一个文档出现在顶部的选项卡上。然后将“源”和“设计”作为打开/激活文档底部的两个选项卡。

回答

1

你可以重写LayoutDocumentPaneControl的默认样式,为此我建议看一下提供的主题。 示例代码(未测试):

<!--MyCustomDocumentPaneControlStyle--> 
<Style x:Key="MyCustomDocumentPaneControlStyle" TargetType="{x:Type avalonDockControls:LayoutDocumentPaneControl}"> 
    <Setter Property="TabStripPlacement" Value="Bottom"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type avalonDockControls:LayoutDocumentPaneControl}"> 
       <Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*"/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 
        <!--Following border is required to catch mouse events--> 
        <Border Background="Transparent" Grid.RowSpan="2"/> 
        <Grid Panel.ZIndex="1" Grid.Row="1"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition/> 
          <ColumnDefinition Width="Auto"/> 
         </Grid.ColumnDefinitions> 
         <avalonDockControls:DocumentPaneTabPanel x:Name="HeaderPanel" Grid.Column="0" IsItemsHost="true" Margin="2,2,2,0" Grid.Row="0" KeyboardNavigation.TabIndex="1"/> 
         <avalonDockControls:DropDownButton 
          x:Name="MenuDropDownButton" 
          Style="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}" 
          Focusable="False" 
          Grid.Column="1"> 
          <avalonDockControls:DropDownButton.DropDownContextMenu> 
           <avalonDockControls:ContextMenuEx 
            ItemsSource="{Binding Model.ChildrenSorted, RelativeSource={RelativeSource TemplatedParent}}"> 
            <avalonDockControls:ContextMenuEx.ItemContainerStyle> 
             <Style TargetType="{x:Type avalonDockControls:MenuItemEx}" BasedOn="{StaticResource {x:Type MenuItem}}"> 
              <Setter Property="HeaderTemplate" Value="{Binding Path=Root.Manager.DocumentPaneMenuItemHeaderTemplate}"/> 
              <Setter Property="HeaderTemplateSelector" Value="{Binding Path=Root.Manager.DocumentPaneMenuItemHeaderTemplateSelector}"/> 
              <Setter Property="IconTemplate" Value="{Binding Path=Root.Manager.IconContentTemplate}"/> 
              <Setter Property="IconTemplateSelector" Value="{Binding Path=Root.Manager.IconContentTemplateSelector}"/> 
              <Setter Property="Command" Value="{Binding Path=., Converter={StaticResource ActivateCommandLayoutItemFromLayoutModelConverter}}"/> 
             </Style> 
            </avalonDockControls:ContextMenuEx.ItemContainerStyle> 
           </avalonDockControls:ContextMenuEx> 
          </avalonDockControls:DropDownButton.DropDownContextMenu> 
          <Image Source="/AvalonDock;component/Images/PinDocMenu.png"/> 
         </avalonDockControls:DropDownButton>        
        </Grid> 
        <Border x:Name="ContentPanel" 
          VerticalAlignment="Stretch" 
          HorizontalAlignment="Stretch" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          Background="{TemplateBinding Background}" 
          Grid.Column="0" 
          KeyboardNavigation.DirectionalNavigation="Contained" 
          Grid.Row="0" 
          KeyboardNavigation.TabIndex="2" 
          KeyboardNavigation.TabNavigation="Cycle"> 
         <ContentPresenter x:Name="PART_SelectedContentHost" 
              ContentSource="SelectedContent" 
              Margin="{TemplateBinding Padding}" 
              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </Border> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
        </Trigger> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Model.ChildrenCount}" Value="0"> 
         <Setter Property="Visibility" Value="Collapsed" TargetName="MenuDropDownButton" /> 
        </DataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="ItemContainerStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="Visibility" Value="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}"/> 
       <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/> 
       <Setter Property="ToolTip" Value="{Binding ToolTip}"/> 
      </Style> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <avalonDockControls:LayoutDocumentTabItem Model="{Binding}"/> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 

    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <avalonDockControls:LayoutDocumentControl Model="{Binding}"/> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

当你有新的风格使用DockingManager的DocumentPaneControlStyle财产只需将其插入:

<ad:DockingManager DocumentPaneControlStyle="{StaticResource MyCustomDocumentPaneControlStyle}"> 
... 
</ad:DockingManager> 

阿土

+1

谢谢您的回答。不幸的是,我认为我的问题并不完整(我已经更新了它)。我正在寻找一种将标签添加到文档“内部”的方式 - 如视图。如果可以通过将样式应用于DockingManager来实现这一点,那么如何在文档中定义这些视图? – RickNZ