【问题标题】:Keep TabItems in a TabControl from repositioning?防止 TabControl 中的 TabItems 重新定位?
【发布时间】:2011-02-18 03:02:16
【问题描述】:

在 WPF 中,是否有一种简单的方法可以阻止 TabControl 中的 TabItems 在选定的 TabItem 更改时重新定位?因此,单击 TabItem 只会显示其内容,但不会像通常那样重新定位 TabItems(通过将选定的 TabItem 移动到选项卡的底行,如果它还没有的话)。

编辑:澄清一下,我确实希望选项卡显示在多行中,我只是不希望在选择底部行以外的行中的 TabItem 时重新定位选项卡标题。我希望标题的集合保持完全静态,但是当单击它的标题时仍会显示该 TabItem 的内容。

谢谢!

【问题讨论】:

    标签: c# wpf tabcontrol tabitem


    【解决方案1】:

    我知道已经晚了,但我今天必须弄清楚,所以就这样吧。

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

    这是一个使用 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

    【讨论】:

      【解决方案2】:

      如果你有 Blend,你可以为你的标签控件编辑模板的副本,以消除我相信的这种行为。

      【讨论】:

      • 我真的很感激没有太多评论的负面影响。我刚刚花了一天时间与 Microsoft 团队成员结对编程,其中包括 blend 团队的成员,我们在其中讨论了 WPF 控件的无视特性。我们还通过在 blend 中编辑控件模板的副本,然后将编辑后的模板设置为该控件的默认模板来覆盖扩展器控件的行为。如果选项卡控件的这种行为是硬编码的,那么它违反了 Microsoft 发布的指南。
      猜你喜欢
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2011-02-09
      • 2021-10-27
      • 1970-01-01
      • 2012-01-29
      相关资源
      最近更新 更多