2010-05-11 56 views
2

在WPF中,是否有一种简单的方法来阻止TabControl中的TabItems在选定的TabItem更改时不会重新定位?因此,单击一个TabItem只需显示它的内容,但不像它通常那样重新定位TabItems(通过将选定的TabItem移动到最后一行标签,如果它没有的话)。让TabControl中的TabItems不能重新定位?

编辑:为了澄清,我希望标签显示在多行,我只是不希望标签页眉重新定位时,从底部行以外的行中选择一个TabItem。我希望头部集合保持完全静态,但对于该TabItem的内容在单击头部时仍然可以显示。

谢谢!

回答

0

如果你有混合,你可以编辑你的选项卡控件的模板的副本,以消除这种行为,我相信。

+0

我真正体会到了负没有这么多评论。我刚刚与Microsoft团队成员(包括混合团队的成员)进行了一天的配对编程,其中我们讨论了WPF控件的不寻常特性。我们还通过在混合中编辑控件模板的副本来覆盖扩展器控件的行为,然后将编辑的模板设置为该控件的默认模板。如果选项卡控件的这种行为是硬编码的,那么它与Microsoft发布的指南是相反的。 – 2010-05-12 01:54:54

5

我知道它的晚了,但我必须今天解决这个问题,所以在这里。

基本上,您需要为选项卡控件创建自己的控件模板,并使用不同的面板来包含选项卡项目。

这是使用WrapPanel的简化示例。

<Style TargetType="TabControl" x:Key="MyTabControl"> 
<Setter Property="Template"> 
    <Setter.Value> 
    <ControlTemplate TargetType="TabControl"> 
     <Grid SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local" HorizontalAlignment="Stretch"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <WrapPanel x:Name="HeaderPanel" HorizontalAlignment="Center" VerticalAlignment="Top" IsItemsHost="true" 
      Grid.Row="0" KeyboardNavigation.TabIndex="1" /> 
     <ContentPresenter Grid.Row="1" x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="10" /> 
     </Grid> 
    </ControlTemplate> 
    </Setter.Value> 
</Setter> 

然后用这个如下

<TabControl Style="{StaticResource MyTabControl}" .... 

您可以下载该控件模板样本here

+0

WrapPanel为我做了诡计 – 2017-06-12 06:42:38