wpf - 如何使 WPF 选项卡控件的选项卡区域小于控件?

标签 wpf tabcontrol

我有一个场景,我的应用程序右上角有两个按钮,我有一个选项卡控件横跨整个应用程序的屏幕。 (基本上这两个按钮与选项卡控件中的选项卡位于同一水平线上)。问题是当我打开多个选项卡时,按钮和选项卡重叠。我不想指定网格行/列号,以便按钮位于选项卡上方。

有什么方法可以指定Tab控件在自动启动第二行选项卡之前必须打开选项卡控件的某个区域吗?

换句话说,如果我的选项卡控件的宽度为 X,我如何才能告诉显示实际选项卡的区域它应该只占用比方说 x-15 的空间量。

谢谢!

最佳答案

您必须为 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>

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

关于wpf - 如何使 WPF 选项卡控件的选项卡区域小于控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4771051/

相关文章:

wpf - TabControl - 使 TabItem 出现在内容顶部

vb.net - 如何为 Windows 窗体 TabControl 设置键盘快捷键?

.net - 尝试找到如何在 Silverlight 中取消 TabControl.SelectionChanged

wpf - Silverlight 是否适合大型 LOB 应用程序

c# - 在 WinForms 选项卡控件中,我如何知道您正在从/向哪个选项卡移动?

javascript - 使用 CefSharp 将字符串/JSON 从 C# 传递到 JS

c# - WPF TextBox UpdateSourceTrigger=LostFocus 不断更新数据

带有验证的 WPF 文本框丢失 ErrorTemplate

c# - WPF 是否有浏览本地文件系统的控件?

wpf - 在 WPF-Window 中使用 Microsoft Windows 标准样式?