我对WP7很感兴趣。基本上整个导航概念很糟糕,但我不想详细介绍。我基本上把它扔掉了,并使用我自己的“PRISM like”导航。
现在还有一个问题,我有3个应用程序,都使用相同的基础架构库,并从该库中获取页面。 AppA和AppB之间的唯一区别是加载了数据库。 99%的代码保持不变。
我目前在AppA中所做的是手动转到一种IntroPage(基本上只显示启动画面),然后,一旦加载此页面,我的框架就会接管并导航到相应的页面(试验与真实等等。)
现在,由于WP7的这个伟大功能只能通过一直导航BACK来启用应用程序的退出,想要离开应用程序的用户必须再次通过“加载屏幕”。至少如果他使用后退按钮。我不介意,但我可能会失败的市场规则,通过在“回来的路上”显示加载屏幕......
我试图告诉我的框架“如果你第二次到达介绍页面,快速导航回来”退出应用程序。引发异常,似乎我不允许以这种方式退出应用程序。
然后我尝试更改属性/ WMAppManifest.xml 来调整它,尝试这样的事情
Name =“_ default”NavigationPage =“/ InfrastructureLib; component / Pages / RealStartPage.xaml”
也不起作用......我错过了一些东西(很确定它只是一些愚蠢的错字)或者是我想做的事情是不可能的? (将应用程序的起始页面设置为其他库中的页面)
如果没有,有没有人知道如何调整App.xaml以允许从另一个库加载自定义页面作为起始页?
答案 0 :(得分:1)
我认为这是支持的,但你必须做一个小改动。在WMAppManifest.xml中,而不是 NavigationPage = “/ InfrastructureLib;组件/页/ RealStartPage.xaml” 使用 NavigationPage = “InfrastructureLib;组件/页/ RealStartPage.xaml” 松开路径中的第一个'/'。它适用于我的WP 7.1。
答案 1 :(得分:0)
关于将不同页面设置为起始页的问题的答案:
您可以从Manifest文件中删除该条目,并直接从App.xaml.cs调用另一个库中的页面。最好的地方是发射方法
private void Application_Launching(object sender, LaunchingEventArgs e)
{
Uri nUri = new Uri("/InfrastructureLib;component/Gui/Pages/IntroPage.xaml", UriKind.Relative);
((App)Application.Current).RootFrame.Navigate(nUri);
}
答案 2 :(得分:0)
我遇到了类似的问题,因为我想根据保存的设置在不同的页面上启动应用程序。我无法直接将RootFrame的内容设置为除WMAppManifest中命名的页面之外的任何内容。我按照之前的建议尝试了Navigate(),直接设置了内容,并设置了Source。非常反直觉,但没有任何效果!
我终于选择创建一个StartView.xaml来为我做切换。它只包含
<phone:PhoneApplicationPage x:Class="MyApp.Views.StartView" ...> <ContentControl x:Name="body" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/> </phone:PhoneApplicationPage>
它的构造函数根据加载的设置填充body.Content。
public StartView() { InitializeComponent(); switch (App.Current.Settings.StartPage) { default: body.Content = new MainPage(); break; case "Other": body.Content = new OtherPage(); break; } }
这可以避免您在Navigate()中注意到的问题,因此您无需返回虚拟的“正在加载”页面。需要注意的是(禁用页面缓存),当您向后导航时,将根据当时的设置填充正文,这可能与用户从该页面导航时的设置不同。也许这就是你想要的!如果没有,使用瞬态PhoneApplicationService状态可以轻松解决问题。
缺憾?有点,但是当什么工作不起作用时你会怎么做? HTH。