天天看点

WPF和WinRT中的导航问题



一、frame、page框架的相关介绍

1、frame类:

继承层次结构

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.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);

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框架也更能够在多种设备中游刃有余。