使用本地样式覆盖字典样式

时间:2016-12-14 11:25:47

标签: c# wpf xaml modern-ui

我有一个用户控件(由modernui提供的modernTab),它有一个应用了它的样式,如资源字典中指定的那样(再次带有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的特定实例的链接样式。所以在我的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>

现在,我从查看源代码中了解到,在现代桌面控件的内部,它有一堆ListBoxItems - 这些是我想要改变样式的。

我不能得到的是为什么我的&#34;本地&#34;样式不会降低并覆盖此特定实例。有任何想法吗?

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

2 个答案:

答案 0 :(得分:2)

你在这里做的不是覆盖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} .../>

希望这有帮助

答案 1 :(得分:1)

您需要“覆盖”ModernTab中ListBox的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>