xamarin.forms - 如何在退出 UWP Xamarin 表单时提示确认消息?

标签 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 ,但这段代码似乎对我不起作用,我没有在调试输出中看到“关闭”打印出来。

最佳答案

经过一番挖掘,我发现应用关闭确认实际上是 restricted capability您必须在应用程序 list 中声明。右击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 ,您将不得不使用延迟,以便系统等待 await在检查 Handled 之前完成属性(property):

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 相比,此方法的优势每次都是在这种情况下,应用程序首先经历暂停生命周期事件,这允许您保存任何未保存的更改,而 Application.Terminate()例如,这意味着应用程序会立即“硬杀”。

关于xamarin.forms - 如何在退出 UWP Xamarin 表单时提示确认消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52050237/

相关文章:

Xamarin 窗体 TreeView

xamarin.forms - StackLayout 两列,每列占用一半的空间

c# - 使用 SSO/OpenID Connect 的 UWP 应用程序的回调 uri 是什么?

serial-port - UWP SerialDevice.FromIdAsync 返回 null

python - 检查文件是否存在于 Python 2.7 中

c# - 从 Tap (TapGestureRecognizer) 事件中提取 byte[] 到 Xamarin Forms 中的 Click 事件

c# - 通过依赖注入(inject)进行多重导航控制

uwp - .net native 编译器 2.0.2 无法构建应用程序。无法加载程序集 System.Data.dll

Javascript将单选按钮添加到DOM中的对话框

x 秒后 Jquery 销毁对话框