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

时间: 2024-12-21 17:35:17

WPF和WinRT中的导航问题的相关文章

winform放入wpf主窗体中?

问题描述 winform放入wpf主窗体中? wpf作为主窗体有导航作用,winform是已经写好的程序.怎么把这个winform加载到wpf这个框里? 解决方案 http://jingyan.baidu.com/article/3aed632e663387701080910d.html

捕捉WPF应用程序中XAML代码解析异常

由于WPF应用程序中XAML代码在很多时候是运行时加载处理的.比如DynamicResource,但是在编译或者运行的过程中,编写的XAML代码很可能有错误,此时XAML代码解析器通常会抛出称为XamlParseException的异常.但是抛出的XamlParseException异常提供的信息非常简单,或者是很不准确.此时我们关于通过对变通的方法来获取更多的异常信息: 我们知道,WPF应用程序中的XAML代码是在InitializeComponent方法中解析的.而这个方法通常位于窗口对象的

WPF笔记(1.2 Navigation导航)——Hello,WPF!

这一节是讲导航的.看了一遍,发现多不能实现,因为版本更新了,所以很多旧的语法不支持了,比 如说,不再有NavigationApplication,仍然是Application,TextBlock容器的TextWrap属性改为 TextingWrap,StartupUri指向"Page1.xaml".只要WPFApplication(不是Browser)内展示Page的页面,都 会自动产生导航条. 下面我们来看Page1.xaml Example 1-16. A sample navig

WPF应用程序中的发声功能

几个星期以前,我坐在一辆崭新的丰田普锐斯汽车中,听着租车公司的销售代理讲解着仪表盘上遍布 的陌生控制开关和指示器."哇,"我想,"虽然技术和车一样都那么陈旧了,制造商仍继续美化着用 户界面". 从最广义的层面上说,用户界面是人机交互的地方.虽然这一概念与技术本身一样历史悠久,但用户 界面作为一种艺术形式大放异彩倚仗的却是个人计算机革命. 现在,恐怕只有很小一部分个人计算机用户能够记得 Apple Macintosh 和 Microsoft Windows 图形 用户

UI前沿技术 – WPF应用程序中的MIDI音乐

每一台 PC 都包含一个内置的 16 人乐队,可播放一些音乐.人们不容易注意此乐队的成员,因为它 们表示的可能是 Windows 所支持的声音和视频功能阵列中利用最不充分的组件. 此 16 人乐队是在符合 MIDI(乐器数字接口)标准的硬件或软件中实现的电子音乐合成器.在 Win32 API 中,以单词 midiOut 开头的函数支持使用 MIDI 合成器播放音乐. MIDI 支持不是 .NET Framework 的一部分,但如果要在 Windows 窗体或 Windows Presentat

stylesheet-bootstrap中的导航中java为何在360浏览器java下拉菜单点了没反应

问题描述 bootstrap中的导航中java为何在360浏览器java下拉菜单点了没反应 <!DOCTYPE html> Bootstrap 实例 - 带有下拉菜单的标签 带有下拉菜单的标签 Home SVN iOS VB.Net Java Swing jMeter EJB 分离的链接 PHP 以下是显示的图片 解决方案 电脑感染了360等非法流氓软件 解决方案二: 有可能是浏览器禁用了js--换个浏览器--比如谷歌火狐--

在WPF的DataGrid中如果排序后再编辑单元格, 然后就不能重新绑定DataGrid?

问题描述 在WPF的DataGrid中如果排序后再编辑单元格, 然后就不能重新绑定DataGrid? 我找了很多类似的提问,都没找到答案,包括在stackoverflow. 正常的情况下,代码是可以运行的,但是一旦用户在datagrid中对某列排序了,接下来再编辑单元格也没问题,可是一旦在cellediteding事件中加入重新绑定,运行就会出错."{"在 AddNew 或 EditItem 事务过程中不允许"Sorting"."}". 我想可能

getcolumns-GetColumns函数怎样才能改变首页中的导航栏内容?

问题描述 GetColumns函数怎样才能改变首页中的导航栏内容? 这是首页中导航栏函数引用代码: 这是GetColumns代码: 我想要改变导航栏的内容,应该怎么修改才行? 解决方案 http://bbs.csdn.net/topics/390810540

百度导航-安卓百度地图中的导航怎么关闭夜间模式?

问题描述 安卓百度地图中的导航怎么关闭夜间模式? 就是我现在写一个导航,不想用夜间模式,想去掉,求代码.求详细代码 解决方案 在设置里,如图所示选择 解决方案二: 赶紧来大神啊 在线等 解决方案三: 没人呢 很急啊啊啊啊 解决方案四: 难道设置里面没有??? 解决方案五: 有图吗?在设置看看,应该可以