windows-phone-8 – 覆盖WP8导航 – 在PhoneApplicationPage中崩
我正在尝试做一些可以说是坏主意的事情,但我认为这仍然是可能的.我试图覆盖WP8如何处理后退按钮并自己实现它.我认为如果我:
计划 >只在整个应用程序中创建一个“框架”和“页面” Repro Here’s a sample project that has the crash 代码 ..然后它应该工作.但是,我的尝试被Windows Phone挫败了. Here’s the code: // This basically happens on PhoneApplicationService.OnLaunched _viewModelChanged.StartWith(ViewModel).Where(x => x != null).Subscribe(vm => { var page = default(IViewFor); var frame = RootVisual as PhoneApplicationFrame; // Find the initial PhoneApplicationPage for the app page = RxApp.GetService<IViewFor>("InitialPage"); // Depending on how we're being signalled (i.e. if this is cold start // vs. resume),we need to create the PhoneApplicationFrame ourselves if (frame == null) { frame = new PhoneApplicationFrame() { Content = page,}; } page.ViewModel = vm; var pg = page as PhoneApplicationPage; if (pg != null) { pg.BackKeyPress += (o,e) => { if (ViewModel.Router.NavigationStack.Count <= 1 || ViewModel.Router.NavigateBack.CanExecute(null)) { return; } e.Cancel = true; ViewModel.Router.NavigateBack.Execute(null); }; } // Finally,set Application.RootVisual RootVisual = frame; }); 悲 这很好用,直到这段代码执行完毕后,框架排队的DispatcherItem崩溃了app: System.NullReferenceException occurred Message: A first chance exception of type 'System.NullReferenceException' occurred in Microsoft.Phone.ni.dll Microsoft.Phone.ni.dll!Microsoft.Phone.Controls.PhoneApplicationPage.InternalOnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) Unknown Microsoft.Phone.ni.dll!Microsoft.Phone.Controls.PhoneApplicationPage.Microsoft.Phone.Controls.IPhoneApplicationPage.InternalOnNavigatedFromX(System.Windows.Navigation.NavigationEventArgs e) Unknown Microsoft.Phone.ni.dll!System.Windows.Navigation.NavigationService.RaiseNavigated(object content,System.Uri uri,System.Windows.Navigation.NavigationMode mode,bool isNavigationInitiator,Microsoft.Phone.Controls.IPhoneApplicationPage existingContentPage,Microsoft.Phone.Controls.IPhoneApplicationPage newContentPage) Unknown Microsoft.Phone.ni.dll!System.Windows.Navigation.NavigationService.CompleteNavigation(System.Windows.DependencyObject content,System.Windows.Navigation.NavigationMode mode) Unknown Microsoft.Phone.ni.dll!System.Windows.Navigation.NavigationService.ContentLoader_BeginLoad_Callback(System.IAsyncResult result) Unknown Microsoft.Phone.ni.dll!System.Windows.Navigation.PageResourceContentLoader.BeginLoad_OnUIThread(System.AsyncCallback userCallback,System.Windows.Navigation.PageResourceContentLoader.PageResourceContentLoaderAsyncResult result) Unknown Microsoft.Phone.ni.dll!System.Windows.Navigation.PageResourceContentLoader.BeginLoad.AnonymousMethod__0(object args) Unknown [Native to Managed Transition] mscorlib.ni.dll!System.Delegate.DynamicInvokeImpl(object[] args) Unknown System.Windows.ni.dll!System.Windows.Threading.DispatcherOperation.Invoke() Unknown System.Windows.ni.dll!System.Windows.Threading.Dispatcher.Dispatch(System.Windows.Threading.DispatcherPriority priority) Unknown System.Windows.ni.dll!System.Windows.Threading.Dispatcher.OnInvoke(object context) Unknown System.Windows.ni.dll!System.Windows.Hosting.CallbackCookie.Invoke(object[] args) Unknown System.Windows.RuntimeHost.ni.dll!System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(System.IntPtr pHandle,int nParamCount,System.Windows.Hosting.NativeMethods.ScriptParam* pParams,System.Windows.Hosting.NativeMethods.ScriptParam* pResult) Unknown 解决方法
所以,我已经解决了这个 – 我的代码是有问题的,因为我没有弄清楚WP8是如何工作的:)这是我现在理解的,这也可能是错的,但我还是会写的
您的WP8应用程序如何初始化: >操作系统通过重新水化App.xaml.cs来创建您的App类>这意味着,您的构造函数会运行,作为其中的一部分,您将创建一个PhoneApplicationFrame>创建PhoneApplicationFrame似乎也设置了一个全局静态变量(在App.xaml中创建PhoneApplicationService时会发生相同的事情,它会设置PhoneApplicationService.Current).>然后NavigationService尝试通过资源字符串(即’/MainPage.xaml’)重新创建XAML视图.它会重新创建以前被逻辑删除的那个,或者如果没有,它会默认为WMAppManifest中的那个(这是我不理解的部分).> PhoneApplicationFrame.Navigated由NavigationService调用 – 这是你可以实际开始做的事情,包括最重要的是,设置Application.RootVisual,它将发送Loading …屏幕> PhoneApplicationService.Launched或PhoneApplicationService.Activated终于触发,基本上一切都已设置,具体取决于您的应用程序如何被唤醒. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- window下mysql 启动
- Windows – 由于MSVCR110.dll,MS Visual Studio 2012终端无
- 如何将程序输出管道输出到屏幕和Windows下的文件
- windows-server-2008 – Windows Update代理更新失败
- windows环境redmine安装及应用
- 使用InstallShield注册COM对象
- 在Windows 7上更改Eclipse中“大纲视图”的突出显示颜色
- Windows下 gpu版 Tensorflow 安装
- windows-server-2008 – 什么是Hyper-V虚拟映像的良好备份计
- 32位Windows 7上的Java 7 – Java Webstart – 无法加载资源
- Windows VPN客户端连接在不同的端口上
- windows-phone-7 – WP7链接到购买应用/评论
- windows-7 – 在Windows 7 64位上安装SQL Server
- MinGW没有定义WIN32,预处理器指令中的错误
- windows – 将一个字节的数据附加到文件需要多少
- wpf – 如何从字节数组创建System.Windows.Media
- windows – IE6 IE7在干净的XP安装上
- windows-7 – 使用Powershell查询schtasks
- 在IIS 8 / Windows 2012上安装IIS 6管理兼容性
- 在Microsoft Sql Server Management Studio中测试