防止 TabControl 中的 TabItem 重新定位?

发布于 2024-08-31 17:47:36 字数 269 浏览 10 评论 0原文

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

编辑:为了澄清,我确实希望选项卡显示在多行中,我只是不希望在选择除底行之外的行中的 TabItem 时重新定位选项卡标题。我希望标头集合保持完全静态,但在单击其标头时仍显示该 TabItem 的内容。

谢谢!

In WPF, Is there a simple way to stop TabItems in a TabControl from being repositioned when the selected TabItem changes? So that clicking on a TabItem would simply display its contents, but not reposition the TabItems as it usually does (by moving the selected TabItem to the bottom row of tabs if it wasn't there already).

Edit: To clarify, I do want the tabs to be displayed in multiple rows, I just don't want the tab headers to be repositioned when a TabItem from a row other than the bottom row is selected. I'd like the collection of headers to remain completely static, but for the contents of that TabItem to still be displayed when its header is clicked.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

來不及說愛妳 2024-09-07 17:47:36

我知道已经晚了,但我今天必须解决这个问题,所以就这样吧。

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

这是使用 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}" ....

可以在此处下载控件模板示例

I know its late but I had to figure this out today so here goes.

Basically you need to create your own control template for the tab control and use a different panel to contain your tab items.

Here is a simplified example using a 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>

You then use this as follows

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

You can download the control template samples here

北凤男飞 2024-09-07 17:47:36

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

If you have Blend you can Edit a copy of the template for your tab control to remove this behavior I believe.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文