• Silverlight开发之1导航(Navigation)


    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

  • 相关阅读:
    两角和的正切
    积化和差与和差化积
    require.js的简单使用
    HTML、css、javascript、DOM编程
    SignalR长连接的简单用法
    【ESP8266】发送HTTP请求
    记录自己的第一篇博客
    1 为什么搭建.Net core下的云开发框架
    C#线程中LOCK的意义
    ping命令执行过程详解
  • 原文地址:https://www.cnblogs.com/facingwaller/p/1833598.html
Copyright © 2020-2023  润新知