2011-01-22 8 views
2

私はアプリケーションの右上に2つのボタンがあり、アプリケーションの画面全体にタブコントロールがあるシナリオがあります。 (基本的に、2つのボタンは、タブコントロールのタブと同じ水平線上にあります)。問題は、複数のタブが開いているときに、ボタンとタブが重なってしまうことです。私はボタンがタブの上になるようにグリッド行/列番号を指定する必要はありません。WPFタブコントロールのタブ領域をコントロールよりも小さくするにはどうすればよいですか?

タブコントロールに、タブコントロールを開く必要がある特定の領域を指定して、自動的に2番目のタブ行を開始する方法はありますか?

言い換えれば、タブコントロールの幅がXの場合、占有すべき実際のタブが表示される領域をx-15分だけ表示できます。

ありがとうございます!

+1

今私が考えることができるのは、TabControlをサブクラス化してロジックをオーバーライドすることだけです。 – ChrisF

答えて

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

関連する問題