2011-01-22 3 views
2

У меня есть сценарий, в котором у меня есть две кнопки в правом верхнем углу приложения, и у меня есть элемент управления вкладкой, охватывающий экран всего приложения. (В основном две кнопки находятся на той же горизонтальной линии, что и вкладки в элементе управления вкладкой). Проблема в том, что когда у меня открыто несколько вкладок, кнопки и вкладки перекрываются. Я не хочу указывать номера строк/столбцов сетки, чтобы кнопки находились над вкладками.Как сделать вкладку элемента управления вкладкой WPF меньше, чем элемент управления?

Есть ли способ указать в элементе управления Tab определенную область, в которой он должен открыть элементы управления вкладками, прежде чем он автоматически запустит вторую строку вкладок?

Другими словами, если мой элемент управления вкладкой имеет ширину X, как я могу определить область, в которой отображаются фактические вкладки, на которые он должен занимать, например, x-15.

Спасибо!

+1

Единственное, что я могу сейчас думать, это подклассировать TabControl и переопределить логику. – ChrisF

ответ

4

Чтобы сделать это, вам необходимо предоставить ControlTemplate для TabControl. Вот пример, где 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

Смежные вопросы