有谁知道为什么TabControl的padding属性不会使用经典主题呈现,但适用于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>
我是否缺少一些关于经典主题的内容,例如所有填充都被忽略了?
答案 0 :(得分: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>
对于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>