2013-07-17 25 views
2

我有一个TabControl的自定义样式。作为样式的一部分,我希望所选的TabItem出现在内容之上。目前TabPanel没有设置ZIndex,因此它出现在内容下面(所需行为)。TabControl - 制作一个TabItem出现在内容顶部

我似乎无法工作的是让选定的TabItem出现在内容的顶部。对TabItem设置Panel.ZIndex似乎没有任何效果

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

TabItem的风格(重要的一点):

<Trigger Property="IsSelected" Value="true"> 
    <Setter Property="Panel.ZIndex" Value="1"/> 
    <Setter Property="Background" TargetName="Bd" Value="#fff"/> 
</Trigger> 

这里是我目前有(左),我想什么的图像(右)。请注意,TabPanel右侧的阴影来自Border围绕ContentPresenterTabControl模板本身。因此我希望所选的TabItem出现在它上面!

enter image description here VS enter image description here

附:加分,如果有人知道如何使圆润的TabPanel的左上角和左下角的角落 - 我放弃了试图让工作

+1

你可以添加一个你期待什么反对你现在拥有的图像因为我不能真正按照你的问题。 – Viv

+0

@Viv谢谢 - 更新了我的问题 – Chris

+0

那么你在找什么似乎是我没有自定义Style设置的'TabControl'的默认行为。所有的WPF似乎都是这样做的,当选择了'TabItem'时,它的标题最终会取决于宽度或高度的2个像素的高度,基于方向,最终覆盖它和内容之间的边界。 – Viv

回答

0

无法更改的TabControl的ControlTemplate

这个问题似乎是默认的ControlTemplatehttp://msdn.microsoft.com/en-us/library/ms754137(v=vs.110).aspx)具有ContentPresenter的TabPanel后宣布,有效迫使它上面Z顺序。

一个简单的解决方案可以是简单地从所提供的链接复制此,将其粘贴在与扭转的TabPanel的顺序和边界元件(一些调整,可能需要为边界现在可以坐在TabPanel的顶部,阻止它的视图)。

<Style TargetType="{x:Type TabControl}"> 

    <Setter Property="Template"> 

     <Setter.Value> 

      <ControlTemplate TargetType="{x:Type TabControl}"> 

       <Grid KeyboardNavigation.TabNavigation="Local"> 

        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition/> 
        </Grid.RowDefinitions> 

        <!-- VisualStateManager stuff... --> 

        <Border Grid.Row="1" ... > 

         <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent"/> 

        </Border> 

        <TabPanel Grid.Row="0" ... /> 

       </Grid> 

      </ControlTemplate> 

     </Setter.Value> 

    </Setter> 

</Style> 

有关您的的TabPanel•圆角的角落,我再次建议你看一看的的ControlTemplate的TabPanel类。