在我的Windows Phone 8应用程序中,我在页面之间导航。说
从MainPage
(某些用户控制点击到) - > Page1 然后按一下按键,我会再次回到主页
从MainPage
(某些用户控件b点击) - &gt; Page2 ,然后再次按键再次按主页,依此类推至第3页,第4页等< / p>
在这里,我想确定从哪个页面加载主页面?
根据我想根据导航历史加载用户控件,说第1页,第2页或第3页。
我在库中找不到任何内置属性或函数。
任何帮助,我都在寻找最佳实践来实现这样的功能。
答案 0 :(得分:0)
您可以将后堆栈用于此类目的。
答案 1 :(得分:0)
您可以创建
enum PageType
{
NONE,
PAGE_1,
PAGE_2,
PAGE_3,
PAGE_4
}
然后在MainPage
中,您可以使用ivar作为
private PageType pageType = PageType.NONE;
然后当您移动到页面时,您可以设置它
pageType = PageType.PAGE_!;
NavigationService.Navigate(new Uri("Page1.xaml", UriKind.Relative));
当你回到MainPage
时,你可以拥有这个
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (e.NavigationMode == NavigationMode.Back)
{
switch (pageType)
{
case PageType.NONE:
//Your code
break;
case PageType.PAGE_1:
//Your code
break;
case PageType.PAGE_2:
//Your code
break;
case PageType.PAGE_3:
//Your code
break;
case PageType.PAGE_4:
//Your code
break;
}
}
}
修改强>
然后,您可以使用导航上下文。
在您的用户控件中
NavigationService.Navigate(new Uri("Page1.xaml?PAGE_TYPE=Page1", UriKind.Relative));
在您的主页中
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (e.NavigationMode == NavigationMode.Back)
{
String pageType = null;
NavigationContext.QueryString.TryGetValue("PAGE_TYPE", out pageType);
if (pageType == "Page1")
{
//Your code
}
}
}
答案 2 :(得分:0)
使哈希表全局化。
Hashtable ht = new Hashtable();
ht.Add("page1");
NavigationService.Navigate(new Uri("Page1.xaml", UriKind.Relative));
答案 3 :(得分:0)
似乎NavigationService不包含您需要的信息,以及NavigatingCancelEventArgs附带的OnNavigatingFrom参数。
不幸的是,似乎没有内置功能可以解决您的需求。
但是,你可以做的是坚持用户的最后一页(处理墓碑场景)。例如,它可能在AppSettings中,这是一个伪代码:
public class WhateverYouWantLastPagePersister
{
private const string LastPageID = "LastPage";
public string GetLastPage()
{
string lastPage = string.Empty;
IsolatedStorageSettings.ApplicationSettings.TryGetValue<string>(LastPageID, out lastPage);
return lastPage;
}
public void PersistLastPage(string lastPage)
{
IsolatedStorageSettings.ApplicationSettings[LastPageID] = lastPage;
}
}
要“自动”保留您上次访问过的网页,您可以从PhoneApplicationPage派生并覆盖OnNavigatingFrom以创建您自己的基页:
public class BasePage : PhoneApplicationPage
{
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
Uri currentUri = ((App)Application.Current).RootFrame.CurrentSource;
WhateverYouWantLastPagePersister.PersistLastPage(CustomMethodToExtractPageNameFromUri(currentUri));
}
}
需要保留最后访问过的页面的所有页面都必须从中派生出来(所以Page1,Page2 ......)
最后,您可以使用 WhateverYouWantLastPagePersister
.GetLastPage()
来获取所需内容。
当然,在这些伪代码示例中:
CustomMethodToExtractPageNameFromUri
是一个简单的字符串解析器WhateverYouWantLastPagePersister
可以是静态类,单例,注入DI框架,这取决于你!答案 4 :(得分:0)
如果您必须知道自己来自哪个页面,则可以使用PhoneApplicationService.Current.State。在辅助页面中,覆盖OnBackKeyPress并设置值
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
base.OnBackKeyPress(e);
PhoneApplicationService.Current.State["LastPage"] = this;
}
然后在MainPage中,您将覆盖OnNavigatedTo并检查状态值
protected override void OnNavigatedTo(NavigationEventArgs e)
{
object lastPage;
if((e.NavigationMode == NavigationMode.Back) &&
(PhoneApplicationService.Current.State.TryGetValue("LastPage", out lastPage)))
{
// we navigated back and we know what the last page was!
var pageName = lastPage.GetType().Name;
if (pageName == "Page1")
{
// do something!
}
}
}
答案 5 :(得分:0)
只需在导航回主页时传递参数,也许枚举类型包含'page1''page2'...