没有MetroWindow的Mahapps Metro Dialog

时间:2017-03-26 22:06:11

标签: c# wpf xaml mahapps.metro

我想在我的应用程序中使用mahapps.metro的对话框。我的窗口是正常的window

public partial class MainWindow : Window

不是

MetroWindow

在我的按钮方法中,我写了这个:

var metroWindow = (Application.Current.MainWindow as MetroWindow);
await metroWindow.ShowMessageAsync("Foo", "Bar");

我在ThemeManager

中添加了App.xaml.cs
protected override void OnStartup(StartupEventArgs e)
{
    Tuple<AppTheme, Accent> appStyle = ThemeManager.DetectAppStyle(Application.Current);

    ThemeManager.ChangeAppStyle(Application.Current,
                                ThemeManager.GetAccent("Green"),
                                ThemeManager.GetAppTheme("BaseDark")); // or appStyle.Item1
    base.OnStartup(e);
}

App.xaml里面我添加了

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Cobalt.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

当我执行我的程序时,我得到了一个

  

的NullReferenceException

因为metroWindow == null

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

我的窗口是正常窗口。

那是你的问题。由于ShowMessageAsyncMetroWindow类的扩展方法,因此您必须引用MetroWindow才能调用它。这意味着您必须使用MetroWindow替换普通窗口或使用其他对话框。 ShowMessageAsync方法仅适用于MetroWindow

以下代码尝试将应用程序的MainWindow窗口强制转换为MetroWindow,但如果主窗口确实是正常窗口,则转换将始终失败:

var metroWindow = (Application.Current.MainWindow as MetroWindow);

这就是为什么你得到NullReferenceException

  

我该如何解决这个问题?

您必须使用MetroWindow。恐怕没有其他解决方案。