我有一个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
模板本身ContentPresenter
周围的TabControl
。因此,我希望选定的TabItem
出现在它上面!
vs
P.S。奖励标记,如果有人知道如何使TabPanel
的左上角和左下角四舍五入 - 我放弃了试图让它工作
答案 0 :(得分:0)
您无法更改 TabControl 的 ControlTemplate 吗?
问题似乎是默认的 ControlTemplate (http://msdn.microsoft.com/en-us/library/ms754137(v=vs.110).aspx)在 TabPanel 之后声明 ContentPresenter ,有效地强制执行它在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 上的圆角,我会再次建议查看 TabPanel 类的 ControlTemplate 。