2011-01-22 125 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