退出UWP Xamarin表单时如何提示确认消息?

时间:2018-08-28 04:43:26

标签: xamarin.forms uwp dialog

目标实现:
-提示确认消息“ 您确认要退出吗?”,并带有选项“ ”和“ 取消

我一直在寻找实现上述目标的方法。我尝试了以下代码:

Windows.UI.Core.Preview.SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += async (sender, args) =>
{
        args.Handled = true;
        var dialog = new MessageDialog("Are you confirm to exit?", "Exit");
        System.Diagnostics.Debug.WriteLine("CLOSE");            
};

我在 MainPage.xaml.cs 中写了上述代码,但是该代码似乎对我不起作用,我看不到“ CLOSE”打印出来在调试输出中。

1 个答案:

答案 0 :(得分:1)

经过一番挖掘,我发现应用程序关闭确认实际上是一个restricted capability,您必须在应用程序清单中声明。右键点击 Solution Explorer 中的Package.appxmanifest文件,然后选择查看代码

在打开的XML文件中,首先在根Package元素中添加以下名称空间:

xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"

现在找到Capabilities部分,在其中添加confirmAppClose功能:

<Capabilities>
   <Capability Name="internetClient" />
   <rescap:Capability Name="confirmAppClose" />
</Capabilities>

另外,请注意,如果要显示MessageDialog,则必须使用延迟,以便系统在检查{{1}之前等待await完成。 }属性:

Handled

与每次手动终止应用程序并将事件每次设置为var deferral = e.GetDeferral(); var dialog = new MessageDialog("Are you sure you want to exit?", "Exit"); var confirmCommand = new UICommand("Yes"); var cancelCommand = new UICommand("No"); dialog.Commands.Add( confirmCommand); dialog.Commands.Add(cancelCommand); dialog.CancelCommandIndex = 1; dialog.DefaultCommandIndex = 1; if (await dialog.ShowAsync() == cancelCommand) { //cancel close by handling the event e.Handled = true; } deferral.Complete(); 相比,此方法的优势在于,在这种情况下,应用程序首先经历了暂停生命周期事件,这使您可以保存所有未保存的更改,例如Handled意味着应用立即“硬销”。