在我的 UWP 应用中,我想创建一个应用内部通讯录页面。我可以选择一个联系人,并将所选联系人返回到我打开通讯录的页面。
在我来自的Android中,有一个名为"startActivityForResult"的函数,它打开一个活动,完成后获取返回值。
我想创建相同的行为。
我用Frame.Navigate(typeof(ContactBook))
做了这件事,然后在选择联系人时,我用Frame.Navigate(typeof(PreviousPage), selectedContact)
导航回来
在这种情况下,Frame.GoBack()
方法毫无用处,因为我无法传递参数。
如何解决这个问题?
我不是 100% 熟悉 android 和"startActivityForResult",但你想把整个框架导航掉吗? UWP 应用中没有任何等效项,WPF 的 showDialog() 甚至没有真正的等效项,这可能是你要找的。
你只有几个选择,而且没有一个是真正"惊人的"。
您可以执行上述操作,即导航到包含所有联系人的页面,然后导航到新页面,但根据应用的布局方式,您可能会丢失页面上的数据(因为它是新实例而不是堆栈中的备份,因此您无法真正缓存它)。 您也无法导航到页面的实例,它只能导航到新页面或通过堆栈从后退/向前。 如果您使用 GoBack 并缓存页面(使用"必需"模式进行缓存),那么您可以在静态类中对存储的值进行一些脏查找(我知道,丑陋而不是 MVVM)或设置本地设置值并在 OnNavigatedTo() 方法中读取它之前页面。
如果不需要使用框架移动,则可以使用浮出控件或自定义浮出控件用户控件生成各种弹出窗口,该弹出窗口将显示页面的 XAML,而不是页面框架。 这将在调整大小方面遇到一些困难(因此 W10 比 W10M 更是如此)等等,但您将能够不转换出框架本身。 然后,您可以看到所选内容的值,然后在提交事件中,您可以只使用该页面,因为它已经打开。
如果需要,可以为浮出控件生成自定义用户控件,并放置一些可绑定到 MVVM 的自定义依赖项属性,这实际上完全取决于您执行的操作内容和方式。
所以简短的回答,没有快速的方法来实现你正在寻找的东西,这似乎是API的问题。 我会在 API 的用户语音 (https://wpdev.uservoice.com/forums/110705-universal-windows-platform) 上提出建议,并尝试让它投票!
UWP 应用中没有任何等效项,WPF 的 showDialog() 甚至没有真正的等效项,这可能是你要找的。
@Daniel,不,UWP 应用中有等效项。请参阅启动应用程序以获取结果,您可以按照该文档中的教程来实现此目的。
为此,您需要创建两个应用程序。一个是将启动结果应用程序的应用程序(假设"主应用程序"),这里的另一个应用程序应该是通讯录应用程序。通讯录应用的行为类似于模式窗口,主应用将等待通讯录应用的结果。
但在 UWP 应用中,可以使用 ContactStore 类访问包含联系人的数据库。
因此,您需要重新考虑是否需要自己创建联系人应用程序。
编辑:我可能误解了您的问题,您只是希望您的页面像通讯录一样行事,而不是想自己创建通讯录。但无论如何,这是相同的,您可以创建另一个应用程序来保存要从主应用程序启动的页面。