【问题标题】:TabControl padding doesn't work with classic themeTabControl 填充不适用于经典主题
【发布时间】:2012-06-01 21:42:59
【问题描述】:

有谁知道为什么 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>

我是否缺少一些关于经典主题的内容,例如所有的填充都被忽略了?

【问题讨论】:

    标签: .net wpf xaml themes padding


    【解决方案1】:

    使用工具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 的 Padding 绑定到 ContentPresenter 的边距;在 Windows Classic 中,边距设置为 2。

    我个人认为,这是一个错误。您可能希望在 http://connect.microsoft.com/ 上创建错误报告。

    作为一种解决方法,您可以定义自己的内容模板:

    <TabControl>
        <TabControl.ContentTemplate>
            <DataTemplate>
                <ContentPresenter Content="{Binding}" Margin="50,5,10,5"/>
            </DataTemplate>
        </TabControl.ContentTemplate>
        ...
    <TabControl>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      相关资源
      最近更新 更多