2012-03-16 2 views
3

Кто-нибудь знает, почему свойство padding TabControl не отображает классическую тему, но работает для темы Luna?TabControl padding не работает с классической темой

Classic

Luna

The XAML является очень простой. Я сделал левую прокладку 50, чтобы проблема была очевидна на снимках экрана.

<!-- Tab control styling --> 
     <Style TargetType="{x:Type TabControl}"> 
      <Setter Property="BorderBrush" Value="Black" /> 
      <Setter Property="BorderThickness" Value="1,1,1,1" /> 
      <Setter Property="Padding" Value="50,5,10,5" /> 
      <Setter Property="Margin" Value="3.5" /> 
      <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}" /> 
     </Style> 

Есть что-то в классической теме, которую я пропускаю, например. все дополнения игнорируются?

ответ

4

Используя один из инструментов ShowMeTheTemplate или Microsoft Expression Blend, вы можете проверить шаблоны управления, которые Microsoft реализовала по умолчанию для разных тем.

Для Windows Classic, шаблон управления в TabControl выглядит следующим образом:

<ControlTemplate TargetType="{x:Type TabControl}"> 
    <Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local"> 
     ... 
     <TabPanel .../> 
     <Grid ...> 
      <Microsoft_Windows_Themes:ClassicBorderDecorator ...> 
       <ContentPresenter x:Name="PART_SelectedContentHost" Margin="2,2,2,2" .../> 
      </Microsoft_Windows_Themes:ClassicBorderDecorator> 
     </Grid> 
    </Grid> 
    <ControlTemplate.Triggers> 
     ... 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

Для Луны, это так:

<ControlTemplate TargetType="{x:Type TabControl}"> 
    <Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local"> 
     ... 
     <TabPanel .../> 
     <Border ...> 
      <ContentPresenter x:Name="PART_SelectedContentHost" Margin="{TemplateBinding Padding}" .../> 
     </Border> 
    </Grid> 
    <ControlTemplate.Triggers> 
     ... 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

В Luna, Обивка TabControl привязан к краю ContentPresenter; в Windows Classic значение поля равно 2.

Лично я считаю, что это ошибка. Возможно, вы захотите создать отчет об ошибке на http://connect.microsoft.com/.

В качестве обходного пути, вы можете определить свой собственный шаблон контента:

<TabControl> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <ContentPresenter Content="{Binding}" Margin="50,5,10,5"/> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
    ... 
<TabControl> 
Смежные вопросы