在FileSavePicker的文档中,它声明:
警告如果您在应用程序被捕捉时尝试显示文件选择器,则不会显示文件选择器,并且将引发异常。您可以通过确保应用程序未被捕捉或在调用文件选择器之前将其取消隐藏来避免这种情况。
我目前正在检查该应用是否被快照,我的应用在每种情况下的响应都不同。我的默认行为也没有显示FileSavePicker,所以我不能尝试再回到其他东西。我也不想强迫应用程序解除绑定。
但是,ApplicationViewState在8.1之后已弃用。在该文档和相关搜索中,建议开发人员直接访问窗口大小以确定正确的行为。但是,如果视图状态不再可用,我如何知道文件选择器是否会抛出异常?该应用程序被认为是“抢购”的大小?
另外,我正在使用C ++,因此与C ++兼容的答案将非常出色。我也不介意看到C#解决方案。
答案 0 :(得分:2)
关于FileSavePicker文档 - 我认为这只是一个疏忽。您引用的文本来自Windows 8版本,对我而言,它似乎没有针对Windows 8.1进行更新。
如果您查看FileOpenPicker documentation,就会看到它已更新:
重要在Windows 8中,如果您在应用程序被捕捉时尝试显示文件选择器,则不会显示文件选择器,并且将引发异常。您可以通过确保应用程序未被捕捉或在调用文件选择器之前将其取消隐藏来避免这种情况。 ...请注意,Windows 8.1未定义特定的快照窗口大小。相反,用户可以将应用程序调整到任何宽度,最小化。 因此,如果您的应用仅在Windows 8.1上部署,则可以忽略EnsureUnsnapped功能并在本主题的示例代码中调用它。
上面的最后一句(粗体)基本上表示如果您在Windows 8.1下运行,您可以忽略状态并安全地打开文件对话框。
为了测试上述内容,我使用VS 2012创建了一个带有文件保存选择器的Windows 8应用程序(在C#中)。我相信结果将与C ++相同,但我不是100%肯定。
我应该注意,我的测试应用程序不检查视图状态,并且总是尝试打开文件对话框。
当应用程序在处于捕捉状态的Windows 8下运行时,应用程序会导致错误。在Windows 8.1下运行时,相同的应用程序(相同的二进制文件)允许打开文件保存对话框而不会出现问题。如前所述,Windows 8.1中没有捕捉状态,因此我测试应用程序的方式是将应用程序打开到最小宽度(320像素)。
总结: