Exh*_*dus 5 wpf c#-4.0 mahapps.metro
在mahapps地铁中,有没有办法在每个控制的基础上改变主题(亮/暗)?我的问题是,我有一个使用Light主题的窗口,但我有一部分它有一个非常黑暗的背景我不能让ComboBox正确显示,小箭头保持黑色,即使我改变了背景颜色为黑色,前景为白色.我找到了关于改变箭头的参考文献,其中包含了一些关于控制模板的相当严重的诡计,但到目前为止运气不大......为了使事情变得更复杂,组合框位于列表框的项目模板中.
我在其他地方有一个弹出窗口,我意识到它具有完全合适的组合框样式,因为它使用的是黑暗主题.这就是为什么我问是否有一种简单的方法可以在单一控件下切换主题?
谢谢!
不确定我是否正确地遵循了这个问题,所以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>
Run Code Online (Sandbox Code Playgroud)
现在几乎你的应用程序中的所有内容都将使用灯光主题.但是,如果我们有一个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>
Run Code Online (Sandbox Code Playgroud)
现在我们BaseDark.xaml在范围中添加资源,ComboBox这应该只是让它应用于它的黑暗主题.

这个工作的原因只是由于一些Brush魔术:)控件的所有样式都使用他们查询和查找的画笔.现在,当多个Brushes具有相同名称时,具有最高范围优先级的Resource优先.
因此,本质上BaseLight.xaml和BaseDark.xaml都定义了具有不同颜色的相同画笔.
有了这个基于哪个资源适用于控件最终定义控件或它的孩子得到的主题.