首页 > 代码库 > WPF和WP8 Silverlight中的导航问题
WPF和WP8 Silverlight中的导航问题
继承层次结构
System.Object
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Media.Visual
System.Windows.UIElement
System.Windows.FrameworkElement
System.Windows.Controls.Control
System.Windows.Controls.ContentControl
System.Windows.Controls.Frame
命名空间:System.Windows.Controls
程序集:PresentationFramework(在PresentationFramework.dll中)
Frame是能够定位到并显示内容的内容控件。Frame可以在其他内容中承载,与其他控件和组件。
当Frame控件导航到 HTML内容时,内部Frame 控件实例化本机 webbrowserActivex控件。WPF 通过对函数控件启用安全功能在浏览器 Activex控件。应用于的功能控制对 XBAP和独立应用程序不同。某些应用程序应通过附加功能控制防止恶意内容运行。有关更多信息,请参见中的 “浏览器控件和功能控制”在安全性 (WPF) 的和WebBrowserControl Overviews and Tutorials部分。
内容可以导航到通过设置与URI的Source属性所需内容的。另外,可以使用Navigate方法的一下重载之一,内容可以导航到:Navigate(Uri),Navigate(Uri,Object)
如果内容导航到由URI时,Frame返回包含内容的对象。或者,内容可以导航到使用接受一个对象的Navigate方法重载:Navigate(Object),Navigate(Object,Object)
导航的生存期可以通过以下活动来跟踪:Navigating,Navigated,NavigationProgress,NavigationFailed,NavigationStopped,LoadCompleted,FramentNavigation
不是导航发生的所有事件都引发;引发事件集的方式取决于发生的类型的导航(内容或内容片段),这个导航完成(取消,停止或失败)。
下图演示了这些事件将引发顺序:
2、Page类
继承层次结构
System.Object
System.Web.UI.Control
System.Web.UI.TemplateControl
System.Web.UI.Page
System.Web.UI.DataVisualization.Charting.ChartHttpHandler
System.Web.UI.MobileControls.MobilePage
命名空间: System.Web.UI
二、 WPF、WP8 Silverlight 中的导航实现
1、在WPF中的导航:
window到window:
Window window1=new Window();
window1.Show();
window到page:
Navigation Windowwindow1=new NavigationWindow();
window1.Source=newUri(“Page1.xaml“,UriKind.Relative);
window1.Show();
page到page:
NavigationService.GetNavigationService(this).Navigate(newUri(“Page2.xaml”,UriKind.Relative));
2、在Silverlight(包括WP8开发的时候选择银光框架时)中的导航:
(sliver 的意思是切开,切片) (silver才是银色)
this.NavigationService.Navigate(newUri(“/Page1.xaml”,UriKind.Relative);
在WPF中反斜杠是可有可无的,但是WP8中必须要的。
三、浅谈WPF、Silverlight和WinRT
在WPF(WPF4)中,导航主要是NavigationService类型,Frame,Page和NavigationWindow类型都有NavigationService属性,同时Frame类型还有一些方法比如Navigate就是直接调用其背后的NavigationService的相应方法。
Frame继承自ContentControl,Page继承自FrameworkElement。
Navigate方法可以传入Uri和Object参数,同时支持第二个Object代表额外数据。然后再Frame.Navigated事件中,通过NavigationEventArgs的ExtraData属性来获取额外的数据。但是WPF中的导航数据传递对于开发者来说很头疼。
在winRT中,没有了NavigationService。NavigationCacheMode等在Silverlight中都有的。同时Page还引入了一些新的元素,比如winRT中特有的AppBar。最后winRT中的Page同时引用Frame对象,这个可以说是NavigationService的代替吧,因为如果Page连Frame都不引用,那么Page本身便不具备任何主动导航功能了。
WP8中使用银光貌似只是权宜之计?银光也逐渐被微软放弃,随着应用商店的合并,winRT框架也更能够在多种设备中游刃有余。
WPF和WP8 Silverlight中的导航问题