覆盖WPF UserControl默认主题

时间:2013-08-21 17:19:30

标签: wpf themes resourcedictionary wpf-4.0 mahapps.metro

我在WPF项目中使用MahApps.Metro。但是我没有使用nuget包,而是下载源代码并将其作为项目添加到我的解决方案中(出于某些原因)。如您所知,它具有所有控件的默认主题。现在,我正在尝试更改项目中MetroWindow的默认值。我不想改变原来的项目。所以我创建了一个新的ResourceDictionary,我正在为此设计风格。我尝试更改MetroWindow默认值,但似乎没有x:Key属性就不可能。我的意思是我试过这个:

<Style TargetType="{x:Type metro:MetroWindow}">
    <!-- My styles and templates gone here... -->
</Style>

也是这个:

<Style x:Key="{x:Type metro:MetroWindow}" TargetType="{x:Type metro:MetroWindow}">
    <!-- My styles and templates gone here... -->
</Style>

但是没有一个对控件产生影响,控件仍然使用MahApps.Metro定义的默认主题。我错过了什么?任何的想法?它甚至可能吗?

2 个答案:

答案 0 :(得分:0)

我也尝试了同样的但事实证明不可能以这种方式改变窗口风格。唯一可以做到的方法是rolling your own window

对于控件,您可以使用例如:

更改样式
<Style TargetType="Button" BasedOn="{StaticResource MetroButton}">
    <!-- your changes here -->
</Style>

答案 1 :(得分:0)

另一种方法是创建自己的主题。

  1. 从Mahapps复制BaseLight.xaml或BaseDark.xaml文件的内容并将其粘贴到新主题文件中。
  2. 在应用程序启动时覆盖主题

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
    
        // Add and apply style
        ThemeManager.AddAccent("CustomAccent", new Uri("pack://application:,,,/Custom.Style;component/CustomAccent.xaml"));
        ThemeManager.AddAppTheme("CustomTheme", new Uri("pack://application:,,,/Customo.Style;component/CustomTheme.xaml"));
        ThemeManager.ChangeAppStyle(Application.Current, ThemeManager.GetAccent("CustomAccent"), ThemeManager.GetAppTheme("CustomTheme"));
    }
    
  3. 例如,要更改所有MetroWindow的背景颜色,请更改键的值&#34; WhiteColor&#34;