Dirkster99 / AvalonDock

Our own development branch of the well known WPF document docking library

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How do I move the AvalonDock Anchorable Pane tab to the top instead of the bottom?

uzername opened this issue · comments

Hello. In example, tabs of Anchorable Pane are located at bottom, but I'd like to have them placed on top, like in Document Pane.
I checked this page:
https://github.com/Dirkster99/AvalonDock/wiki/LayoutAnchorablePaneControl
but there is no appropriate method for this.
A similar LayoutDocumentPaneControl has 'TabStripPlacement'.
I checked this answer : https://stackoverflow.com/questions/29434424/how-do-i-move-the-avalondock-anchorable-pane-tab-to-the-top-instead-of-the-botto
It offers workaround, but it is not that elegant. Is it possible to achieve this without implementing custom style?

Okay, so the above mentioned answer from stackoverflow worked. For completeness, I post the fragment here:

<Style x:Key="MyCustomAnchorablePaneControlStyle" TargetType="{x:Type xcad:LayoutAnchorablePaneControl}">

    <Setter Property="TabStripPlacement" Value="Top"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type xcad:LayoutAnchorablePaneControl}">
                <Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <!--Following border is required to catch mouse events-->
                    <Border Background="Transparent" Grid.RowSpan="2"/>

                    <xcad:AnchorablePaneTabPanel x:Name="HeaderPanel" Margin="2,0,2,2" IsItemsHost="true" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/>

                    <Border x:Name="ContentPanel" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="1" 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>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

    <Setter Property="ItemContainerStyle">
        <Setter.Value>
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
                <Setter Property="ToolTip" Value="{Binding ToolTip}"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}, Path=Items.Count}" Value="1">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Setter.Value>
    </Setter>

    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <xcad:LayoutAnchorableTabItem Model="{Binding}"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>

    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <xcad:LayoutAnchorableControl Model="{Binding}"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>

</Style>

That went to Resources section of App.Xaml.
I applied it in DockingManager form xaml like this:

<DockingManager x:Name="dockManager"
            Grid.Row="1"
            AllowMixedOrientation="True"
            AutoWindowSizeWhenOpened="True"
            IsVirtualizingAnchorable="True"
            IsVirtualizingDocument="True"
            AnchorablePaneControlStyle="{StaticResource MyCustomAnchorablePaneControlStyle}" >
....
</DockingManager>

Tabs went to top, that's for Anchorable