我不确定我是否正确理解了这个问题。您想在父控件使用浅色主题时使ComboBox
使用暗色主题吗?
如果是这样,那么很简单。在控件的资源作用域内添加“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
的魔法:控件都是使用查询和查找的
Brush
进行样式设置的。当多个Brushes具有相同名称时,具有最高范围优先级的资源优先。
因此,实质上
BaseLight.xaml和
BaseDark.xaml都定义了具有不同颜色的相同Brushes。
根据应用于控件的资源,决定了该控件或其子元素使用哪个主题。