2011-01-22 93 views
2

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

是否有任何方法可以指定给Tab控件一个特定区域:它必须在它自动启动第二行选项卡之前打开选项卡控件?

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

谢谢!

+1

我现在唯一能想到的就是继承TabControl并覆盖逻辑。 – ChrisF 2011-01-22 22:44:27

回答

4

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

调整窗口的大小,以看到它的行动。

+0

这正是我所要求的。这可以修改,以便第一行选项卡具有此行为,但以下行具有默认行为? – shaneker 2011-01-23 19:55:03