我可以从App.xaml.cs运行MessageBox.Show(),因此它显示在当前页面上。请为此解决方案或其他解决方案提供一些代码。我需要显示一些与整个应用程序相关的系统消息。
答案 0 :(得分:7)
不确定,但这不起作用吗?
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
MessageBox.Show("");
}
);
您还可以使用App.xaml.cs中提供的导航数据来确定当前页面并在该页面上执行。
我想无论你想出什么,应用程序都需要处于稳定状态,当处理(未处理)异常时,你可能无法做到这一点。您应该告诉我们更多信息,以便我们理解您为什么要这样做。如果您必须从App.xaml.cs调用MessageBox.Show,那么您的设置似乎有问题
答案 1 :(得分:4)
一种简单的方法是......
public partial class App : Application
{
public static void ShowBox(string msg)
{
MessageBox.Show(msg);
}
}
然后从窗口或应用程序的任何其他部分......
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
App.ShowBox("Hello!");
...
由于'ShowBox'方法是静态的,你可以从任何地方调用它。当然不言而喻,这不是真正“最干净”或最强大的方法,但它会起作用。
答案 2 :(得分:1)
我从您的问题中了解到,当您在应用程序中发生某些事件时,您正在寻找一种方法来显示来自App.xaml.cs的消息。
您可以使用为自定义页面触发的事件注册的App.xaml.cs实现观察者模式。
话虽如此,从长远来看,我建议你为此目的使用消息框架。大多数 MVVM框架都带有消息传递框架。它们易于使用,没有或几乎没有学习曲线。
还有更多这样的框架。
答案 3 :(得分:1)
我使用了此链接中提取的http://www.c-sharpcorner.com/UploadFile/c25b6d/message-dialog-in-windows-store-apps/
private async void Delete_Click(object sender, RoutedEventArgs e)
{
var messageDialog = new Windows.UI.Popups.MessageDialog("Are you sure you want to permanently delete this record?");
messageDialog.Commands.Add(new UICommand("Yes", (command) =>
{
//Do delete
}));
messageDialog.Commands.Add(new UICommand("No", (command) =>
{
//Do Nothing
}));
//default command
messageDialog.DefaultCommandIndex = 1;
await messageDialog.ShowAsync();
}
答案 4 :(得分:0)
其他解决方案没有运气,发现:
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync
适用于Windows Phone 8.1,用于从App.xaml.cs调用MessageDialog到ui线程。