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-10-05 06:28:21

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

[Win10]1 WPF和WP8 Silverlight中的导航问题

一.Frame.Page框架的相关介绍 1.Frame类: 继承层次结构 System.Object   System.Windows.Threading.DispatcherObject     System.Windows.DependencyObject       System.Windows.Media.Visual         System.Windows.UIElement           System.Windows.FrameworkElement           

WPF和WP8 Silverlight中的导航问题

一.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.W

将 C++/WinRT 中的线程切换体验带到 C# 中来(WPF 版本)

原文:将 C++/WinRT 中的线程切换体验带到 C# 中来(WPF 版本) 如果你要在 WPF 程序中使用线程池完成一个特殊的任务,那么使用 .NET 的 API Task.Run 并传入一个 Lambda 表达式可以完成.不过,使用 Lambda 表达式会带来变量捕获的一些问题,比如说你需要区分一个变量作用于是在 Lambda 表达式中,还是当前上下文全局(被 Lambda 表达式捕获到的变量).然后,在静态分析的时候,也难以知道此 Lambda 表达式在整个方法中的执行先后顺序,不利于分

WinRT中实现回到列表顶部功能

WinRT中常用的数据列表显示控件大略就是ListBox,ListView,GridView.在应用中,有的时候用户在长时间浏览 列表内容之后想回到列表顶部,那么针对于这种需求该如何实现呢? 最重要的是利用列表控件的ScrollIntoView方法. 好了,啥都不说了,代码如下. XAML: <Page x:Class="DragDemo.BlankPage1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pr

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

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

WinRT中实现元素拖拉效果

前面有一篇博客涉及到手势和指针的用法,其中就有利用手势进行元素的拖拉操作,主要是ManipulationDelta: 博客地址:Windows Phone 8.1触控输入-----手势及指针 其实利用手势ManipulationDelta操作来实现元素拖拉的方法很简单,很实用.但是一旦要实现页面中多个控件元素 的拖拉,难免代码臃肿.其实我们可以抽象出这其中一致的功能代码,这样要实现某一个元素的拖拉效果只需调用共 通类中的共有函数即可. 所以下面介绍的是如何封装成共有的类来进行调用: (这里主要是

WPF 在事件中绑定命令

导航:MVVMLight系列文章目录:<关于 MVVMLight 设计模式系列> 其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实现将命令绑定到事件中. 上一篇中我们介绍了MVVMLight中的命令的用法,那么仅仅知道命令是如何构建使用的还不够,很多情况下我们都需要在某个事件触发的时候才去触发命令,所以将命令绑定到事件上是非常有效的做法,下面我们来接着实现将命令绑定到事件中. WPF实现命令绑定到事件 使用 System.Windows

WPF 在事件中绑定命令(可以在模版中绑定命令)

其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实现将命令绑定到事件中. 上一篇中我们介绍了MVVMLight中的命令的用法,那么仅仅知道命令是如何构建使用的还不够,很多情况下我们都需要在某个事件触发的时候才去触发命令,所以将命令绑定到事件上是非常有效的做法,下面我们来接着实现将命令绑定到事件中. WPF实现命令绑定到事件 使用 System.Windows.Interactivity.dll 中的 Interaction 可以帮助我们实现

WPF在代码中创建DataTemplate时候的异常

今天写段程序用到了在代码中手动创建DataTemplate, var factory = new FrameworkElementFactory(typeof(OperationColumn));    returnnewDataTemplate() { VisualTree = factory }; 运行的时候出现如下异常: FrameworkElementFactory 必须位于此操作的密封模板中. 在 System.Windows.FrameworkElementFactory.Insta