我有一个用户控件(由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中定义我的样式覆盖(即使我并不真的希望它是全局的)并且它没有用。显然,我错过了一些东西。
答案 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>