代码改变世界

Silverlight开发之1导航(Navigation)

2010-09-24 11:53  撞破南墙  阅读(1363)  评论(5编辑  收藏  举报

1 导航控件

 Frame Control :Frame

2导航的一些方法和属性见末尾。

 

3具体使用导航的方法:

@1 直接操作

NavigationService.Navigate(new Uri("/Home", UriKind.Relative)); 

@2使用控件

<HyperlinkButton Name="HomeLink" Content="home"  

                 NavigateUri="/Home" TargetName="ContentFrame" /> 

解释: 

•  Providing the URI to navigate to (NavigateUri)  路径

•  Specifying the name of the Frame to navigate within (TargetName) 

 目标框架可能有多个。可能有多个Frame对象。 

@3设定source

Using the Source Property of the Frame Control 

    ContentFrame.Source = new Uri("/Home", UriKind.Relative);

使用这种方式无法使用 前进 后退等功能。


4页面间的信息传递

类似asp.net 开发中的页面传值

发出:

/Views/ProductDetailsView.xaml?ProductID=879 

接收:

      if (NavigationContext.QueryString.ContainsKey(paramName))           int.TryParse(NavigationContext.QueryString[paramName], out paramValue); 

但是这样url很不友好,类似MVC,我们又更好的办法: 

显示在URL 网址栏上的信息

ProductDetails/879 

只要设定

 <Navigation:UriMapping Uri="/{pageName}/{ID}" 

MappedUri="/Views/{pageName}.xaml?ProductID={ID}"/>

实际解析时候的路径

/Views/{pageName}.xaml?ProductID=879 

具体参见源码。

 

5整合 浏览器 导航按钮

设定 JournalOwnership 的三个枚举值之一

Automatic(默认)

如果 Frame 控件是顶级框架,它将与浏览器日记集成在一起;否则,它将维护自己的日记。

OwnsJournal

Frame 维护自己的日记。此选项可以与任何 Frame 一起使用。

UsesParentJournal

Frame 与浏览器日记集成在一起。此选项只能与顶级 Frame 一起使用;否则,将引发异常。

 

6  FragmentNavigation 的事件

•  Navigating 

•  Navigated 

•  NavigationStopped 

•  NavigationFailed 

•  FragmentNavigation 在开始导航到内容片段时发生。

 

7 听说有这么回事

ContentFrame.Navigate(new Uri("ProductDetails/879#StockLevels", UriKind.Relative)); 

 变成

ProductDetails/879$StockLevels 

但是我试了好像也没有啊。还是会解析成#~~

 

8 View Events ( page 类的 方法)

•  OnNavigatedTo 

•  OnNavigatingFrom 

•  OnNavigatedFrom 

•  OnFragmentNavigation 

 

需要在page页面里覆盖方法来写。

 

9指定当page页面用于帧中时如何缓存页面。

 

Disabled

从不缓存页面,每次访问时创建页面的新实例。

 

Required

缓存页面,并且每次访问时都重复利用缓存的实例,而不考虑帧的缓存大小。

 

Enabled

缓存页面,但当超过帧的缓存大小时放弃缓存的实例。

注意:当你使用Required时候,第二次以后的访问都是同一个缓存了的对象,但是8中的

方法会再次调用。

 

10访问其他类库的页面

url=  /CustomerModule;component/Views/CustomerList.xaml

但是我自己尝试的时候报错。。


源代码和一些功能的演示。

http://aqqcms.codeplex.com/

 navigation 的一些属性

CanGoBack

获取一个值,该值指示后退导航历史记录中是否至少有一个条目。

CanGoForward

获取一个值,该值指示前进导航历史记录中是否至少有一个条目。

 

 

Content

获取或设置 ContentControl 依赖项属性的值。 (继承自 ContentControl。)

ContentLoader

获取或设置一个对象,该对象负责提供与请求的 URI 相对应的内容。

ContentTemplate

获取或设置用于显示 ContentControl 内容的数据模板。 (继承自 ContentControl。)

CurrentSource

获取当前显示的内容的统一资源标识符 (URI)

 

 

JournalOwnership

获取或设置框架是否负责管理自己的导航历史记录,或者它是否与 Web 浏览器日记集成。

 

 

Source

获取或设置当前内容或要导航到的内容的统一资源标识符 (URI)

 

 

UriMapper

获取或设置一个对象,该对象用于管理一个统一资源标识符 (URI) 到此框架的另一个 URI 的转换。

     CacheSize       获取或设置可为框架缓存的页的数目。

 一些常用的方法:

参考资料

Silverlight 4 in action 

Pro Business Applications with Silverlight 4

MSDN