Windows store apps FileSavePicker和不推荐的ApplicationViewState

Windows store apps FileSavePicker和不推荐的ApplicationViewState,windows-store-apps,Windows Store Apps,在的文档中,它指出: 警告如果在应用程序被抓拍时尝试显示文件选择器,则不会显示文件选择器,并将引发异常。你可以通过确保你的应用程序没有被抓拍或者在你调用文件选择器之前取消抓拍来避免这种情况 我目前正在检查应用程序是否被抓拍,我的应用程序在每种情况下的响应都不同。我的默认行为也没有显示FileSavePicker,因此我不能只是尝试然后返回到其他内容。我也不想强制应用程序取消睡眠 但是,在8.1之后,它已被弃用。在该文档和相关搜索中,建议开发人员直接访问窗口大小,以确定正确的行为。但是,如果视图状

在的文档中,它指出:

警告如果在应用程序被抓拍时尝试显示文件选择器,则不会显示文件选择器,并将引发异常。你可以通过确保你的应用程序没有被抓拍或者在你调用文件选择器之前取消抓拍来避免这种情况

我目前正在检查应用程序是否被抓拍,我的应用程序在每种情况下的响应都不同。我的默认行为也没有显示FileSavePicker,因此我不能只是尝试然后返回到其他内容。我也不想强制应用程序取消睡眠

但是,在8.1之后,它已被弃用。在该文档和相关搜索中,建议开发人员直接访问窗口大小,以确定正确的行为。但是,如果视图状态不再可用,我如何知道文件选择器是否会抛出异常?应用程序的“快照”大小是多少


也是,我用C++,所以C++兼容的答案会很精彩。我也不介意看到C#解决方案。

关于FileSavePicker文档,我认为这只是一个疏忽。您引用的文本来自Windows 8版本,在我看来,它似乎没有针对Windows 8.1进行更新

如果查看,您会看到它已更新:

重要信息在Windows 8中,如果在应用程序被抓拍时尝试显示文件选择器,则不会显示文件选择器,并将引发异常。你可以通过确保你的应用程序没有被抓拍,或者在调用文件选择器之前取消抓拍来避免这种情况。。。请注意,Windows 8.1没有定义特定的捕捉窗口大小。相反,用户可以将应用程序的大小调整到任意宽度,直到最小值因此,如果您的应用程序仅部署在Windows 8.1上,您可以忽略EnsureUnsnaped函数,并在本主题的示例代码中调用它。

上面最后一句话(粗体)基本上是说,如果在Windows 8.1下运行,您可以忽略状态并安全地打开文件对话框


为了测试上述内容,我使用VS 2012创建了一个带有文件保存选择器的Windows 8应用程序(C#)。我相信C++的结果会是一样的,但是我不是100%确定的。p> 我应该注意,我的测试应用程序不检查视图状态,总是尝试打开一个文件对话框

当应用程序在Windows 8下以快照状态运行时,应用程序会导致错误。在Windows 8.1下运行的同一应用程序(相同的二进制文件)允许打开文件保存对话框而不会出现问题。如前所述,Windows 8.1中没有快照状态,因此我测试应用程序的方法是将应用程序打开到最小宽度(320像素)


总结如下:

  • 如果您的目标是Windows 8.0,则必须确保在打开“文件选择器”对话框之前取消应用程序
  • 如果您的目标是Windows 8.1,则不必担心状态,因为文件选择器对话框不再抛出任何异常

  • 我已经用Win 8.1 PRO和C++应用程序验证了这一点。谢谢