不确定我是否正确地回答了这个问题,所以你想让你的 ComboBox 在父控件使用 Light 主题时使用 Dark 主题?
如果是这样,那就很简单了。在控件的资源范围内添加 DarkTheme 资源。
所以说我们得到了
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
...
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
现在您应用中的几乎所有内容都将使用浅色主题。但是,如果我们定义了 ComboBox,例如:
<ListBox>
<!-- This is just for an example so you would ofc have this defined in the ItemTemplate normally -->
<ListBoxItem>
<ComboBox>
<ComboBox.Resources>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
</ComboBox.Resources>
<ComboBoxItem Content="A" />
<ComboBoxItem Content="A" />
<ComboBoxItem Content="A" />
</ComboBox>
</ListBoxItem>
<ListBoxItem Content="A" />
<ListBoxItem Content="A" />
</ListBox>
现在我们将BaseDark.xaml 资源添加到ComboBox 的作用域中,这应该只是让它应用了深色主题。
之所以有效,是因为Brush 的一些魔法:) 控件都是使用他们查询和查找的画笔设置样式的。现在,当多个画笔同名时,具有最高范围优先级的资源优先。
所以本质上BaseLight.xaml 和BaseDark.xaml 都定义了不同颜色的相同画笔。
根据应用到控件的资源最终定义该控件或其子项获得的主题。