2

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

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

<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周围。因此,我希望所选内容出现在它之上!ContentPresenterTabControlTabItem

在此处输入图像描述 对比 在此处输入图像描述

如果有人知道如何制作圆形的左上角和左下角,则 Ps Bonus 标记TabPanel- 我放弃了尝试让它工作

4

1 回答 1

1

你不能改变TabControlControlTemplate吗?

问题似乎是默认的ControlTemplatehttp://msdn.microsoft.com/en-us/library/ms754137(v=vs.110).aspx)在TabPanel之后声明了ContentPresenter,有效地强制它在上面Z 顺序。

一个简单的解决方案可能是简单地从提供的链接中复制它,将其粘贴并反转TabPanelBorder元素的顺序(可能需要进行一些调整,因为Border现在可能完全位于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上的圆角,我再次建议查看TabPanelControlTemplate 。

于 2013-12-10T21:10:17.197 回答