TabControl填充不适用于经典主题

时间:2012-03-16 22:04:44

标签: .net wpf xaml themes padding

有谁知道为什么TabControl的padding属性不会使用经典主题呈现,但适用于luna主题?

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 个答案:

答案 0 :(得分:4)

使用其中一个工具ShowMeTheTemplateMicrosoft 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>