Windows store apps UWP应用程序的MessageDialog类是否支持手机上的三个按钮?

Windows store apps UWP应用程序的MessageDialog类是否支持手机上的三个按钮?,windows-store-apps,win-universal-app,Windows Store Apps,Win Universal App,我正在创建一个在Windows Phone上读取文本文件的简单程序。我决定让它成为一个通用Windows平台(UWP)应用程序 在应用程序中,我有一个非常简单的,有三个选项,是,否,取消。它可以在桌面和模拟器上完美工作。但是,当使用实际设备进行测试时,showsync方法失败,并显示消息:“值不在预期范围内” 只有在对话框中注册了两个以上的命令时,才会发生这种情况。MessageDialog类是否真的支持多达三个命令(如文档所示),或者这仅适用于在桌面设备上运行的UWP应用程序?文档似乎缺少有关

我正在创建一个在Windows Phone上读取文本文件的简单程序。我决定让它成为一个通用Windows平台(UWP)应用程序

在应用程序中,我有一个非常简单的,有三个选项,是,否,取消。它可以在桌面和模拟器上完美工作。但是,当使用实际设备进行测试时,
showsync
方法失败,并显示消息:“值不在预期范围内”


只有在对话框中注册了两个以上的命令时,才会发生这种情况。
MessageDialog
类是否真的支持多达三个命令(如文档所示),或者这仅适用于在桌面设备上运行的UWP应用程序?

文档似乎缺少有关移动设备的信息(API在这里应该做得更好)

对于移动设备,如果按Back键,您会得到一个
null
返回值,因此您可以这样做(不推荐使用编码模式,但我能想到的最好方式是):

异步任务测试()
{
常数int YES=1;
常数int NO=2;
常数int CANCEL=3;
var对话框=新消息对话框(“测试”);
添加(新的UICommand{Label=“yes”,Id=yes});
Add(新UICommand{Label=“no”,Id=no});
//丑陋的黑客;不是它应该如何使用。
//TODO:如果MessageDialog API在未来版本中更新,请重新访问
var deviceFamily=分析sinfo.VersionInfo.deviceFamily;
if(deviceFamily.Contains(“桌面”))
{
添加(新UICommand{Label=“cancel”,Id=cancel});
}
//也许Xbox的“B”按钮可以工作,但我不知道最好什么都不做
如果(!deviceFamily.Contains(“Mobile”))
{
抛出新异常(“不知道如何显示设备的对话框”
+设备家族);
}
//如果在手机上按Back,将返回null
var result=wait dialog.ShowAsync();
//C#6语法糖可以避免一些空检查
变量id=(int)(结果?.id??取消);
WriteLine(“您选择了{0}”,id);
}

目前,文档中有一个明确的声明:

该对话框有一个命令栏,在桌面应用程序中最多支持3个命令,在移动应用程序中最多支持2个命令


悲哀但真实:在手机上,只有两个命令。需要更多吗?改为使用ContentDialog。

该解决方案效果很好。最后,我用ApiInformation.IsTypePresent(“Windows.Phone.UI.Input.HardwareButtons”)测试了硬件后退按钮的存在性。另外,通常我会将CancelCommandIndex设置为No或Cancel按钮。在Windows Phone的情况下,我必须显式地将其设置为'Int32.MaxValue'。使用该API的存在并不是更好;理论上,它可以添加到其他没有后退按钮的设备系列中,我不知道其他没有API的设备(如Xbox)是否支持三个按钮。没有完美的解决方案,但我认为DeviceFamily现在是最好的(无论你做什么,都要把
TODO
放在那里!)