2009-05-29 37 views

回答

2

没有放置在该位置的内容一个简单的方法,但有一个办法。要做到这一点,您必须覆盖TabControl的默认ControlTemplate

大多数系统主题把TabPanel(其中选项卡)和标签内容的Grid像这样:

<ControlTemplate TargetType="{x:Type TabControl}"> 
        <Grid KeyboardNavigation.TabNavigation="Local" 
          SnapsToDevicePixels="true" 
          ClipToBounds="true"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition x:Name="ColumnDefinition0"/> 
          <ColumnDefinition x:Name="ColumnDefinition1" 
               Width="Auto"/> 
         </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" 
           BorderThickness="0,0,1,1" 
           BorderBrush="#D0CEBF" 
           KeyboardNavigation.TabNavigation="Local" 
           KeyboardNavigation.DirectionalNavigation="Contained" 
           KeyboardNavigation.TabIndex="2" 
           Grid.Column="0" Grid.ColumnSpan="2" 
           Grid.Row="1"> 
... 

... 

... 
         </Border> 
        </Grid> 
... 
       </ControlTemplate> 

所以你可以另一个ContentControl中添加到网格中,并把它绑定到一个自定义附加属性。请记住,默认的ControlTemplates还有很多控制溢出处理的触发器,除此之外,您必须确保您的其他UI元素不会干扰这种情况。

你应该能够得到这样的事情相当快,不过,如果你没有处理TabControl的方向或溢出:

Three TabItems with a Red Border and TextBlock http://img35.imageshack.us/img35/3237/tabpanelexample.png

祝你好运!