TabControl padding не работает с классической темой - PullRequest
3 голосов
/ 17 марта 2012

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

Classic

Luna

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>

Что-то в классической теме мне не хватает, например все отступы игнорируются?

1 Ответ

4 голосов
/ 17 марта 2012

Используя один из инструментов 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>

Для Luna это выглядит так:

<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>
...