如何在不需要地铁重音主题的情况下显示对话框?

Cha*_*ton 5 c# wpf xaml dialog mahapps.metro

我想像这样显示一个metro风格的对话框:

public async void Button_Click(object sender, RoutedEventArgs e)
{
   var metroWindow = (Application.Current.MainWindow as MetroWindow);
   await metroWindow.ShowMessageAsync("Title", "Body");
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,它一直在抛出错误:

mscorlib.dll中发生了未处理的"System.NullReferenceException"类型异常

使用堆栈跟踪:

在MahApps.Metro.Controls.Dialogs.BaseMetroDialog.HandleTheme()

在MahApps.Metro.Controls.Dialogs.BaseMetroDialog.Initialize()

在MahApps.Metro.Controls.Dialogs.BaseMetroDialog..ctor(MetroWindow owningWindow,MetroDialogSettings设置)

...

在System.Threading.ThreadHelper.ThreadStart()

经过大量的摆弄,我意识到我需要在我的App.xaml资源中添加一个重点来给它一个配色方案.

<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Cobalt.xaml" /> 
Run Code Online (Sandbox Code Playgroud)

但是,我已经构建了我的程序,没有它,包括它已经搞砸了我的所有样式.此外,这里看到的口音总数不多,我找不到符合我方案的口音.

我一直试图ShowMessageAsync用这样的命令直接给它自己的颜色方案方法

metroWindow.MetroDialogOptions.ColorScheme = MetroDialogOptions.ColorScheme 
// MetroDialogColorScheme.Theme 
// MetroDialogColorScheme.Accented 
// MetroDialogColorScheme.Inverted;
Run Code Online (Sandbox Code Playgroud)

但同样的错误仍在继续出现.有办法解决这个问题吗?我怎么能让对话框使用我自己的风格?

编辑

我实际上已经在这里下载了这个文件:https://github.com/MahApps/MahApps.Metro/blob/master/MahApps.Metro/Styles/Accents/Cobalt.xaml

ResourceDirectory.MergedDictionaries取代

  <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Cobalt.xaml" />
Run Code Online (Sandbox Code Playgroud)

  <ResourceDictionary Source="Cobalt.xaml" />
Run Code Online (Sandbox Code Playgroud)

这足以打破这个功能.我可以看到该主题仍然有效,但是当我尝试触发对话框时,窗口将会淡出,但对话框不会出现,我需要重新启动程序.这是怎么回事?

C1r*_*dec 3

你应该看看ThemeManager. 设置AppStyle应用程序启动的时间,如下所示:

ThemeManager.ChangeAppStyle(this, ThemeManager.Accents.First(x => x.Name == "Red"), ThemeManager.DetectAppStyle().Item1);
Run Code Online (Sandbox Code Playgroud)

这是可用主题的示例:

在此输入图像描述

要使用您自己的样式,您可以添加重音符号,如下所示:

ThemeManager.AddAccent("XpertdocBlue", new Uri("XpertdocBlue.xaml", UriKind.Relative));
Run Code Online (Sandbox Code Playgroud)

尝试添加一个ResourceDictionary

这是我的:

<controls:MetroWindow.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml"/>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml"/>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml"/>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml"/>
            <ResourceDictionary Source="pack://application:,,,/Xpertdoc.PortalWordAddIn.Views;component/Resources/Icons.xaml"/>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
            <ResourceDictionary Source="XpertdocBlue.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</controls:MetroWindow.Resources>
Run Code Online (Sandbox Code Playgroud)

这是我的自定义口音 ( XpertdocBlue.xaml):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Color x:Key="HighlightColor">#FF2B579A</Color>

    <Color x:Key="AccentColor">#FF2B579A</Color>
    <!--60%-->
    <Color x:Key="AccentColor2">#CC2B579A</Color>
    <!--40%-->
    <Color x:Key="AccentColor3">#992B579A</Color>
    <!--20%-->
    <Color x:Key="AccentColor4">#662B579A</Color>

    <!-- re-set brushes too -->
    <SolidColorBrush x:Key="HighlightBrush" Color="{StaticResource HighlightColor}" />
    <SolidColorBrush x:Key="AccentColorBrush" Color="{StaticResource AccentColor}"/>
    <SolidColorBrush x:Key="AccentColorBrush2" Color="{StaticResource AccentColor2}"/>
    <SolidColorBrush x:Key="AccentColorBrush3" Color="{StaticResource AccentColor3}"/>
    <SolidColorBrush x:Key="AccentColorBrush4" Color="{StaticResource AccentColor4}"/>

    <SolidColorBrush x:Key="WindowTitleColorBrush" Color="{StaticResource AccentColor}" />

    <SolidColorBrush x:Key="AccentSelectedColorBrush" Color="White" />

    <LinearGradientBrush x:Key="ProgressBrush" EndPoint="0.001,0.5" StartPoint="1.002,0.5">
        <GradientStop Color="{StaticResource HighlightColor}" Offset="0" />
        <GradientStop Color="{StaticResource AccentColor3}" Offset="1" />
    </LinearGradientBrush>

    <SolidColorBrush x:Key="CheckmarkFill" Color="{StaticResource AccentColor}" />
    <SolidColorBrush x:Key="RightArrowFill" Color="{StaticResource AccentColor}" />

    <Color x:Key="IdealForegroundColor">White</Color>
    <SolidColorBrush x:Key="IdealForegroundColorBrush" Color="{StaticResource IdealForegroundColor}"/>

</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)