用本地风格覆盖字典风格

Override dictionary style with local style

我有一个用户控件(一个 modernTab,由 modernui) that has a style applied to it, as is specified in a resource dictionary (that again came with modernui 提供)。

很好,此应用的样式是通过 App.xaml 文件中的一些默认资源提供的,如下所示:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.xaml" />
    <ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.Light.xaml"/>
</ResourceDictionary.MergedDictionaries>

很好,很好。但是,我想覆盖我用于 modernTab 的特定实例的 link 样式。所以在我的 XAML 中,我尝试这样做:

<mui:ModernTab ListWidth="Auto" 
               Layout="List" 
               Links ="{Binding MyViewModelLinks}">
    <mui:ModernTab.Resources>
        <Style TargetType="ListBoxItem">
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="Background" Value="Yellow" />
        </Style>
    </mui:ModernTab.Resources>
</mui:ModernTab>

现在,我通过查看源代码了解到,在 modernTab 控件的内部,它有一堆 ListBoxItems - 这些是我想要更改其样式的内容。

我不明白的是为什么我的 "local" 风格没有下降并覆盖这个特定实例。有任何想法吗?

我尝试在 App.xaml 中定义我的样式覆盖(即使我真的不希望它是全局的)但它没有用。显然我错过了一些东西。

你在这里做的不是覆盖 ModernTab 的默认样式,而是指定特定实例的资源,样式仍然取自 ModernTab.xaml

您在这里需要做的是为您的 ModernTab 实例指定内联样式:

<mui:ModernTab ...>
    <mui:ModernTab.Style>
        <Style TargetType="mui:ModernTab">
            <!------- Full ModernTab Style ----->
        </Style>
</mui:ModernTab.Style>

此内联样式将覆盖默认样式。坏消息是您不能基于默认的 ModernTab 样式创建样式,只能调整小细节,因为默认样式没有名称 (x:Key)。但是您可以复制整个样式,更改其中的任何内容,然后改用它。您可能应该将它放在一个资源文件中,然后像这样在您的 ModernTab 实例上使用它:

<mui:ModernTab Style={StaticResource MyAwesomeStyle} .../>

希望对您有所帮助

您需要 "override" 现代选项卡中列表框的 ItemContainerStyle。这应该可以解决问题:

    <mui:ModernTab ListWidth="Auto" 
               Layout="List" 
               Links ="{Binding MyViewModelLinks}">
        <mui:ModernTab.Resources>
            <Style TargetType="ListBox">
                <Setter Property="ItemContainerStyle">
                    <Setter.Value>
                        <Style TargetType="ListBoxItem">
                            <Setter Property="Foreground" Value="Black" />
                            <Setter Property="Background" Value="Yellow" />
                        </Style>
                    </Setter.Value>
                </Setter>
            </Style>
        </mui:ModernTab.Resources>
    </mui:ModernTab>