C# 在WPF TabControl中分离选项卡标题和选项卡内容

C# 在WPF TabControl中分离选项卡标题和选项卡内容,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我想在标签标题下放一个文本框(就像Google Chrome之类),然后在文本框下放标签内容 所以它是这样的: <!-- Tab Headers --> <TextBox x:Name="txtUrl" /> <!-- Tab Content--> 我到处找了,似乎找不到路 我用的是WPF 有什么想法吗? 谢谢 编辑: 我正试着让它变成这样 这需要您定义一个自定义的控制模板,您可以在其中添加一个文本框: <TabControl> &

我想在标签标题下放一个文本框(就像Google Chrome之类),然后在文本框下放标签内容

所以它是这样的:

<!-- Tab Headers -->
<TextBox x:Name="txtUrl" />
<!-- Tab Content-->

我到处找了,似乎找不到路

我用的是WPF

有什么想法吗? 谢谢

编辑:

我正试着让它变成这样


这需要您定义一个自定义的
控制模板
,您可以在其中添加一个
文本框

<TabControl>
    <TabItem Header="1">
        <TextBlock>content...</TextBlock>
    </TabItem>
    <TabItem Header="2" />
    <TabItem Header="2" />
    <TabControl.Template>
        <ControlTemplate TargetType="{x:Type TabControl}">

            <Grid x:Name="templateRoot" ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition x:Name="ColumnDefinition0"/>
                    <ColumnDefinition x:Name="ColumnDefinition1" Width="0"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition x:Name="RowDefinition0" Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition x:Name="RowDefinition1" Height="*"/>
                </Grid.RowDefinitions>
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0,0,0,1" SnapsToDevicePixels="True">
                    <TabPanel x:Name="headerPanel" Background="Transparent" Grid.Column="0" IsItemsHost="true" Margin="2,2,2,0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/>
                </Border>
                <Border Grid.Row="1" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,0,1,0" SnapsToDevicePixels="True">
                    <TextBox Margin="10" />
                </Border>
                <Border x:Name="contentPanel" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,0,1,1" Background="{TemplateBinding Background}" Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="2" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local">
                    <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                </Border>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsEnabled" Value="false">
                    <Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </TabControl.Template>
</TabControl>

内容。。。

您必须定义一个不仅包括文本,还包括您想要的文本框的屏幕截图。您能提供一个您想要实现的样式的屏幕截图吗?@RenéCarannante如果可能,您能为我提供一个选项卡控件的示例吗?另外,我会用我想要的风格来更新这个问题。好吧,我对你想要的东西的想法是错误的,只是通过文本。您必须隐藏原始tabheader,并使用stackpanel和自定义控件模拟行为。。。据我所知,没有简单的方法。这似乎是一个合适的解决方案,我想我可以尝试一下,尽管我希望有一个更简单的解决方案,因为重新实现TabControl的功能需要一些时间。这是一个好方法,但我发现它存在一些对齐问题,这只是一个大混乱。为了清楚起见,我应该把我想要的控件放在headerPanel和contentPanel之间的边界上,是吗?@OsayedZaheda:是的,在这个特定的示例中,但是您可以根据需要定义模板。标题将插入
元素所在的位置,内容将插入
元素所在的位置。我不打算仅仅使用stackoverflow来为我生成代码,我打算理解代码,以便我可以自己重新创建它,这就是我提出上述问题的原因。但是谢谢你,我马上就去试试。