我的应用程序中的 QueryString 有问题。我的主页中有两个按钮,当用户单击一个按钮时,应用程序导航到第二页并将按钮 ID 存储在 Querystring 上。
现在,我遇到的问题是,如果用户单击按钮,则查询字符串“ID”键设置为相应的 ID 值,但该 ID 值将变为持久性。
IE
点击 Button1 => NavigationService("/Page2.xaml?ID=1",UriKind.Relative) => 检查 page2 的 onNavigated 事件中传入的 ID 值,您会发现 Querystring 在第二页中成功设置为 ID。
但是如果你点击后退按钮然后按button2
点击 Button2 => NavigationService("/Page2.xaml?ID=2",UriKind.Relative) => Check QueryString value in on Navidated event on page2,你发现ID键还是1的值。
如果我是通过按 button2 开始的,那么 ID 键的持久值将为 2。
我完全不知道会发生什么。我在页面之间进行了动画页面转换,但我不知道这会如何影响事情。有人知道会发生什么吗?如果我导航回主页,有没有办法重置整个应用程序?
在主页中
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
animation1.Stop();
animation2.Stop();
animation1.Begin();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
animation2.Begin();
animation2.Completed += (x, y) => NavigationService.Navigate(new Uri("/fooApp;component/Page2.xaml?id=1", UriKind.Relative));
}
private void button2_Click(object sender, RoutedEventArgs e)
{
animation2.Begin();
animation2.Completed += (x, y) => NavigationService.Navigate(new Uri("/fooApp;component/Page2.xaml?id=2", UriKind.Relative));
}
private void button3_Click(object sender, RoutedEventArgs e)
{
animation2.Begin();
animation2.Completed += (x, y) => NavigationService.Navigate(new Uri("/fooApp;component/Page2.xaml?id=3", UriKind.Relative));
}
在第 2 页
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e )
{
base.OnNavigatedTo(e);
animation1.Stop();
animation2.Stop();
animation1.Begin();
}
顺便说一句,我已经注释掉了整个 Page2 Page Loaded 事件。
更新
我注意到的一件事是程序甚至不运行第二个导航调用,它只运行第一个,我知道这是因为如果我将 button2 中的 Uri 源更改为空字符串并以 button1 为按钮运行程序即首先按下,无论我返回并按下哪个按钮,我都会使查询字符串值停留在 1。当我查看 page2 中 OnNavigatedTo 事件中的 NavigationEventArgs e 对象时,它的 URI 源将始终是第一个 uri 源。
我现在的猜测是,animation2.Completed 事件正在充当某种多播委托,无论首先放入其中的内容都会运行。此外,我删除了动画并且只有 Navigation 语句,程序工作很好,但没有动画。有人知道我如何清除动画2.完成事件吗?或者对替代实现有任何想法。