【问题标题】:Mahapps.Metro changing theme of single controlMahapps.Metro 单控换主题
【发布时间】:2014-05-07 14:35:51
【问题描述】:

有没有办法在 mahapps Metro 中按控件更改主题(亮/暗)? 我的问题是,我有一个使用 Light 主题的窗口,但我有一部分的背景非常暗,我无法使 ComboBox 正确显示,即使我更改了小箭头仍然是黑色的背景颜色为黑色,前景为白色。 我找到了关于用一些非常严重的技巧来改变那个箭头的参考资料,但到目前为止还没有多少运气...... 为了让事情更复杂一点,组合框位于列表框的 itemtemplate 中。

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

谢谢!

【问题讨论】:

    标签: wpf c#-4.0 mahapps.metro


    【解决方案1】:

    不确定我是否正确地回答了这个问题,所以你想让你的 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.xamlBaseDark.xaml 都定义了不同颜色的相同画笔。

    根据应用到控件的资源最终定义该控件或其子项获得的主题。

    【讨论】:

    • 谢谢!您的解决方案有效且非常简单!虽然我不断收到来自 VS2012 的错误说:无法将“System.Windows.ResourceDictionary”类型的对象转换为“Microsoft.Expression.Markup.DocumentModel.DocumentCompositeNode”类型,但我认为 Vs 的 xaml 解析器在这里有问题,因为程序本身运行没有问题,而且我还在 Metro 对话框中不断收到对象引用 null 错误,而它与 mahapps 演示中的相同(并且也能正常工作......)
    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多