如何使WPF选项卡控件的选项卡区域小于控件本身?

3
我有一个场景,我的应用程序右上角有两个按钮,我有一个选项卡控件,它跨越整个应用程序屏幕。 (基本上,两个按钮与选项卡中的选项卡在同一水平线上)。 问题是当我打开多个选项卡时,按钮和选项卡会重叠。 我不想指定网格行/列号,使按钮位于选项卡之上。
有没有办法告诉选项卡控件在自动开始第二行选项卡之前打开选项卡控件的特定区域?
换句话说,如果我的选项卡控件宽度为X,如何告诉显示实际选项卡的区域仅占用x-15的空间。
谢谢!

1
我现在所能想到的是子类化TabControl并覆盖逻辑。 - ChrisF
1个回答

5
您需要为 TabControl 提供 ControlTemplate 才能实现该功能。以下是一个示例,其中标题面板右侧保留了100个像素的空间:
<Grid>
    <TabControl>
        <TabControl.Template>
            <ControlTemplate TargetType="{x:Type TabControl}">
                <Grid KeyboardNavigation.TabNavigation="Local"
                      SnapsToDevicePixels="true"
                      ClipToBounds="true">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition x:Name="ColumnDefinition0"/>
                        <ColumnDefinition x:Name="ColumnDefinition1"
                                          Width="100"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition x:Name="RowDefinition0"
                                       Height="Auto"/>
                        <RowDefinition x:Name="RowDefinition1"
                                       Height="*"/>
                    </Grid.RowDefinitions>
                    <TabPanel x:Name="HeaderPanel"
                              Panel.ZIndex ="1" 
                              KeyboardNavigation.TabIndex="1"
                              Grid.Column="0"
                              Grid.Row="0"
                              Margin="2,2,2,0"
                              IsItemsHost="true"/>
                    <Border x:Name="ContentPanel"
                            Background="{TemplateBinding Background}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            KeyboardNavigation.TabNavigation="Local"
                            KeyboardNavigation.DirectionalNavigation="Contained"
                            KeyboardNavigation.TabIndex="2"
                            Grid.Column="0"
                            Grid.Row="1"
                            Grid.ColumnSpan="2">
                        <ContentPresenter x:Name="PART_SelectedContentHost"
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                          Margin="{TemplateBinding Padding}"
                                          ContentSource="SelectedContent"/>
                    </Border>
                </Grid>
            </ControlTemplate>
        </TabControl.Template>
        <TabItem Header="Item1"/>
        <TabItem Header="Item2"/>
        <TabItem Header="Item3"/>
        <TabItem Header="Item4"/>
    </TabControl>
</Grid>

调整窗口大小以查看其效果。


这正是我所要求的。是否可以修改它,使得第一行选项卡具有此行为,而其余行则具有默认行为? - shaneker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接