Mahapps.Metro改变单一控制的主题

时间:2014-05-07 14:35:52

标签: wpf c#-4.0 mahapps.metro

在mahapps地铁中,有没有办法在每个控件的基础上更改主题(亮/暗)? 我的问题是,我有一个使用Light主题的窗口,但我有一部分它有一个非常黑暗的背景我不能让ComboBox正确显示,小箭头保持黑色,即使我改变了背景颜色为黑色,前景为白色。 我找到了有关改变箭头的参考文献,其中包含了一些关于控制模板的相当严重的诡计,但到目前为止运气不大...... 为了使事情变得更复杂,组合框位于列表框的项目模板中。

我在其他地方有一个弹出窗口,我意识到它具有完全合适的组合框样式,因为它使用的是黑暗主题。这就是为什么我问是否有一种简单的方法可以在单一控件下切换主题?

谢谢!

1 个答案:

答案 0 :(得分:5)

我不确定我是否正确地遵循了这个问题,所以当你的父母控件正在使用Light主题时,你想让你的ComboBox使用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资源,这应该只是让它应用于它的暗主题。

enter image description here

这样做的原因仅仅是由于某些Brush魔术:)控件的所有样式都使用了他们查询和查找的画笔。现在,当多个Brushes具有相同名称时,具有最高范围优先级的资源优先。

所以基本上BaseLight.xamlBaseDark.xaml都定义了不同颜色的相同画笔。

基于哪种资源适用于控制,最终定义控制或其子女得到的主题。