将选项卡 headers 放在自己的网格行中?

Put tab headers in their own grid row?

我在网格中有一个 TabControl。有没有办法分配选项卡 "headers area" 来填充特定的网格行,并分配选项卡内容区域来填充另一个?

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <TabControl x:Name="tabControl">
        <TabItem Header="TabItem">
        </TabItem>
        <TabItem Header="TabItem">
        </TabItem>
    </TabControl>
</Grid>

就像@xtreampb 指出的那样,如果您真的想将功能分离出来,则需要进行一些修改。

但是,如果您不想深入了解控件模板,您确实有多种选择可以完成此操作。例如,上次我不得不为这样的请求提供便利时,我只有大约 15 分钟的时间来完成。所以我最终做的就像下面显示的概念,只是做了一个 RadioButton 样式来匹配他们想要的 "Tabs" 的设计。

快速无痛(不到 5 分钟)并且达到了当时的目的。此外,该应用程序非常小,所有者只关心他们想要的设计。

<Grid>
   <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="*"/>
   </Grid.RowDefinitions>

   <StackPanel Orientation="Horizontal" Margin="20">
      <RadioButton GroupName="Blah" Content="Blah1" 
                   IsChecked="{Binding IsSelected, ElementName=Blah1}"/>
      <RadioButton GroupName="Blah" Content="Blah2" Margin="10,0"
                   IsChecked="{Binding IsSelected, ElementName=Blah2}"/>
      <RadioButton GroupName="Blah" Content="Blah3" 
                   IsChecked="{Binding IsSelected, ElementName=Blah3}"/>
   </StackPanel>

   <TabControl Grid.Row="1">
      <TabItem x:Name="Blah1" Visibility="Collapsed">
         <TextBlock Text="Wow TAB 1 IsSelected!"/>
      </TabItem>
      <TabItem x:Name="Blah2" Visibility="Collapsed">
         <TextBlock Text="Wow TAB 2 IsSelected!"/>
      </TabItem>
      <TabItem x:Name="Blah3" Visibility="Collapsed">
         <TextBlock Text="Wow TAB 3 IsSelected!"/>
      </TabItem>
   </TabControl>

</Grid>

希望这对您有所帮助,干杯!