全局样式和局部样式在同一控制下覆盖全局样式

本文关键字:样式 全局 控制下 覆盖 局部 | 更新日期: 2023-09-27 17:59:20

我在DefaultTheme.xaml文件中为TypeMenu项声明了这样的全局样式

<Style TargetType="{x:Type MenuItem}">
    .
    .
    .
</Style>

将其合并到用户控制

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary  Source="../DefaultTheme.xaml" />
</ResourceDictionary.MergedDictionaries>

现在在用户控件中,如果我为TargetType="{x:Type MenuItem}"声明任何样式,它将继承从全局样式声明的样式。

例如

<Style  x:Key="LocalStyle" TargetType="{x:Type MenuItem}">
    .
    .
    .
</Style>

这也将应用全局样式。我不希望这种地方风格继承全球风格。因此,我可以通过在我的用户控制中给定<Style TargetType="{x:Type MenuItem}">..</Style>来覆盖它。

问题是,如果我这样做,我将无法将全局样式应用于控件中的其他位置,因为我已经在本地重写了它。应该如何处理?

全局样式和局部样式在同一控制下覆盖全局样式

基于样式继承,您的叙述是相反的。由于本地样式不是从基础继承的,因此不会将基础样式应用于本地。

If I do this i will not be able to apply the global style to other places in the control because I have locally overridden this

这种情况不会发生,因为本地样式是用键声明的,它将应用于引用该键的MenuItem。其余全部应用全局样式。