我想在我的应用程序中使用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
我该如何解决这个问题?
答案 0 :(得分:2)
我的窗口是正常窗口。
那是你的问题。由于ShowMessageAsync
是MetroWindow
类的扩展方法,因此您必须引用MetroWindow
才能调用它。这意味着您必须使用MetroWindow
替换普通窗口或使用其他对话框。 ShowMessageAsync
方法仅适用于MetroWindow
。
以下代码尝试将应用程序的MainWindow
窗口强制转换为MetroWindow
,但如果主窗口确实是正常窗口,则转换将始终失败:
var metroWindow = (Application.Current.MainWindow as MetroWindow);
这就是为什么你得到NullReferenceException
。
我该如何解决这个问题?
您必须使用MetroWindow。恐怕没有其他解决方案。