win10 UWP MessageDialog 和 ContentDialog

最后更新于:2022-04-01 20:23:36

我之前开发一个软件 winMarkdown,这个软件在关闭需要提示用户还没有保存东西,需要保存,如果用户选择退出,那么把数据存放。 在Metro程序中,没有传统的窗口,当我们要用需要交互的消息提示时,在Win8时代,引入了一个MessageDialog来取代常用的MessageBox。 我在MainPage,挂起`App.Current.Suspending += suspend;` ~~~ private async void suspend(object sender, Windows.ApplicationModel.SuspendingEventArgs e) { SuspendingDeferral deferral = e.SuspendingOperation.GetDeferral(); MessageDialog message_dialog = new MessageDialog("当前还在运行,确定退出", "退出"); message_dialog.Commands.Add(new UICommand("确定", cmd => { }, "退出")); message_dialog.Commands.Add(new UICommand("取消", cmd => { })); message_dialog.DefaultCommandIndex = 0; message_dialog.CancelCommandIndex = 1; IUICommand result = await message_dialog.ShowAsync(); if (result.Id as string == "退出") { } deferral.Complete(); } ~~~ `SuspendingDeferral deferral = e.SuspendingOperation.GetDeferral();`挂起还要做,直到`deferral.Complete();` ~~~ MessageDialog message_dialog = new MessageDialog("当前还在运行,确定退出", "退出"); message_dialog.Commands.Add(new UICommand("确定", cmd => { }, "退出")); message_dialog.Commands.Add(new UICommand("取消", cmd => { })); ~~~ 两个按钮,一个确定,一个取消,可以UICommand ID作为点击后,是哪个按钮点击 ~~~ MessageDialog.DefaultCommandIndex按ESC选择按钮 MessageDialog.CancelCommandIndex按enter按钮 ~~~ ~~~ IUICommand result = await message_dialog.ShowAsync(); if (result.Id as string == "退出") { } ~~~ 程序要调试挂起,需要生命周期,点击挂起  ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-08_5707637499af5.jpg) 我们按enter就会点击确定 而我们对于MessageDialog功能还是觉得不够,ContentDialog可以定义复杂的Xaml自定义 我们把MessageDialog换ContentDialog ~~~ ContentDialog content_dialog = new ContentDialog() { Title = "退出", Content = "当前还在运行,确定退出", PrimaryButtonText = "确定", SecondaryButtonText = "取消", FullSizeDesired = true, }; content_dialog.PrimaryButtonClick += (_s, _e) => { }; await content_dialog.ShowAsync(); ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-08_57076374b17bb.jpg) ~~~ ~~~ ~~~ ContentDialog content_dialog = new ContentDialog() { Title = "退出", Content = new content(), PrimaryButtonText = "确定", SecondaryButtonText = "取消", FullSizeDesired = false, }; content_dialog.PrimaryButtonClick += (_s, _e) => { }; await content_dialog.ShowAsync(); ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-08_57076374c7977.jpg) 参见:  [http://www.cnblogs.com/TianFang/p/4857205.html](http://www.cnblogs.com/TianFang/p/4857205.html)
';