【问题标题】:Metro (MahApps) WPF: Override TabItem styleMetro (MahApps) WPF:覆盖 TabItem 样式
【发布时间】:2017-06-23 02:40:21
【问题描述】:

我喜欢 MahApps Metro for WPF 的很多地方,但也有一些我不太喜欢的地方。其中之一是 Metro 选项卡样式,因此我正在尝试对其进行调整。或者写我自己的,真的。

我的问题是,虽然我可以创建选项卡控件样式,但我似乎根本无法覆盖 TabItem 样式。我开始很简单:只是红色的静态文本,不管那里有什么。但我什至无法做到这一点。它继续使用 Metro 风格。

(通过 Caliburn.Micro 绑定。)

ShellView.xaml:

<TabControl Style="{StaticResource TabControlStyle}" DockPanel.Dock="Top"
    x:Name="AvailableTabs">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding DisplayName}" />
        </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

App.xaml 内部:

<ResourceDictionary Source="Resources/CustomControls.xaml" />

<!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<!-- Accent and AppTheme setting -->
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />

TabControl/项目样式:

<Style TargetType="TabItem" BasedOn="{StaticResource MetroTabItem}">
    <Setter Property="Background" Value="Red" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TabItem">
                <TextBlock Text="Tab" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

结果:

TabControl 的风格确实有效——标签和内容之间存在水平线就足以证明这一点。我还尝试在样式中使用{DynamicResource WhiteBrush}(来自 mahapps),看看它是否找不到 mahapps 资源,但效果很好。但是选项卡本身仍然使用 Metro 风格。

我做错了什么?这让我发疯,我无法摆脱我正在做的事情既简单又愚蠢的感觉。 :)

(另外,我尝试将BasedOn={StaticResource MetroTabItem} 添加到 TabItem 样式中,但也没有用。)

【问题讨论】:

    标签: c# wpf xaml mahapps.metro


    【解决方案1】:

    这是您引用全局/隐式样式的顺序。

    Resources/CustomControls.xaml中的样式

    <Style TargetType="TabItem" BasedOn="{StaticResource MetroTabItem}">
        <Setter Property="Background" Value="Red" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                    <TextBlock Text="Tab" Padding="10" Margin="1,0" 
                               Background="{TemplateBinding Background}" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    MahApps 样式遮蔽,因为它首先被引用。应该是相反的:

    App.xaml

    <ResourceDictionary.MergedDictionaries>
        <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
        <!-- Accent and AppTheme setting -->
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
        <!-- Last in line will prevail -->
        <ResourceDictionary Source="Resources/CustomControls.xaml" />
    </ResourceDictionary.MergedDictionaries>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      相关资源
      最近更新 更多