UWP Frame.GoBack 带参数
UWP Frame.GoBack with argument
场景是我有一个日历页面,该页面显示一个月中的所有日子,每天都有一个添加按钮:
当我点击添加按钮时,它会将我带到另一个页面,如果用户点击硬件后退按钮,我希望应用返回到日历页面,但我希望页面滚动到用户最初的日期点击添加按钮。
滚动到日期没问题 - 如果作为测试,我导航到带有 NavigationEventArgs.Parameter = "2016-01-17"
的页面,然后我的页面滚动到 17 号。
我遇到的问题是我似乎无法在 rootFrame.GoBack();
调用中指定参数。
那么,有没有办法在 rootFrame.GoBack();
调用中指定参数,手动编辑后退按钮堆栈 - 如果有这样的东西 - 以便所需的参数存在。
无法使用GoBack
方法直接传递参数,但有一个解决方法:
在您的日历页面上,将 NavigationCacheMode
设置为 NavigationCacheMode.Required
,这样当您调用 Frame.GoBack
时,日历页面的状态将与您导航到其他页面之前相同:
<Page <!-- some unrelated XAML code -->
NavigationCacheMode="Required"
>
编辑 - 回复评论:
NavigationCacheMode.Required
所做的是,框架不会在您每次导航到该页面时创建页面的新实例,而只会在第一次导航时创建。但是 OnNavigatedTo
方法仍然会在您每次导航到它时被调用。我不知道你的代码,但如果你不这样做,你将不得不检查是否传递了任何参数以及它是否是 string
。所以在你的 OnNavigatedTo
方法覆盖中你会做这样的事情:
string parameter = e.Parameter as string;
if (parameter != null)
{
// Use parameter to scroll to date you need
}
场景是我有一个日历页面,该页面显示一个月中的所有日子,每天都有一个添加按钮:
当我点击添加按钮时,它会将我带到另一个页面,如果用户点击硬件后退按钮,我希望应用返回到日历页面,但我希望页面滚动到用户最初的日期点击添加按钮。
滚动到日期没问题 - 如果作为测试,我导航到带有 NavigationEventArgs.Parameter = "2016-01-17"
的页面,然后我的页面滚动到 17 号。
我遇到的问题是我似乎无法在 rootFrame.GoBack();
调用中指定参数。
那么,有没有办法在 rootFrame.GoBack();
调用中指定参数,手动编辑后退按钮堆栈 - 如果有这样的东西 - 以便所需的参数存在。
无法使用GoBack
方法直接传递参数,但有一个解决方法:
在您的日历页面上,将 NavigationCacheMode
设置为 NavigationCacheMode.Required
,这样当您调用 Frame.GoBack
时,日历页面的状态将与您导航到其他页面之前相同:
<Page <!-- some unrelated XAML code -->
NavigationCacheMode="Required"
>
编辑 - 回复评论:
NavigationCacheMode.Required
所做的是,框架不会在您每次导航到该页面时创建页面的新实例,而只会在第一次导航时创建。但是 OnNavigatedTo
方法仍然会在您每次导航到它时被调用。我不知道你的代码,但如果你不这样做,你将不得不检查是否传递了任何参数以及它是否是 string
。所以在你的 OnNavigatedTo
方法覆盖中你会做这样的事情:
string parameter = e.Parameter as string;
if (parameter != null)
{
// Use parameter to scroll to date you need
}