zoukankan      html  css  js  c++  java
  • wp8.1 Study1: 页面导航&页面间值传递

    摘要:wp8.1与wp8中很多API是不一样了,wp8.1把以前wp7.x时的api去掉了,更多与win8.1的API相似。比如以下的页面导航和页面之间的值传递

    1、页面导航

    利用Frame.Navigate() 方法,C#语句如下:

    1  Frame.Navigate(typeof(Page2));//Page2为一个页面的名称

    这里需要注意的是此方法是可以重载的,即后面介绍的页面间值传递方法。

    2、页面间值传递

    这里利用Frame.Navigate()重载方法,进行单个值传递和多个值传递

    1)单个值传递:可以传递字符、数字等数据,如

    在Page1.xaml.cs中

    1 na=myTextbox.text;
    2 Frame.Navigate(typeof(Page2), na);

    而在Page2.xaml.cs中,接收数据

            //在OnNavigate()方法中接收传递的数据
    
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
               
                myTextblock.Text = e.Parameter.ToString();
            }

    2)多值传递:其基本方法也是和单值传递方法的思想是一样的。

    参考方法如下:

            首先新建个类

    namespace navigateSample
    {
        public class NavigateContext
        {
             public string name { get; set; }
             public int id { get; set; }
            public NavigateContext(string name, int id)
             {
                 this.id = id;
                 this.name = name;
             }
        }
    }

           然后利用NavigateContext类的进行多值传递

                NavigateContext na = new NavigateContext(myTextbox.Text, (int)mySlider.Value);
                Frame.Navigate(typeof(Page2), na);//myTextbox是Page页面中Textbox.name, mySlider是Page页面中Slider.name

    而在Page2.xaml.cs中,接收数据

            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                var na = (NavigateContext)e.Parameter;
                myTextblock1.Text =na.name;
                myTextblock2.Text = na.id.ToString();
            }

    总结:以上知识是学习Bob的视频所学到的,如果有什么不对欢迎指出!

    --------------------------------------------------------------------------------------------------------12.05更新

    理论知识

    一、页面导航

    1、窗口、框架、页面的关系(Windows, Frames and Pages)

    windows包含单个frame,大小在面积的100%。
    frame中包含的页面,也通常在大小提供给windows的面积的100%。
    在Windows商店应用程序的平板/ PC,应用程序可以有多个窗口。在WP中,应用程序只有一个WINDOW。

     2、框架和导航返回堆栈(The Frame and the Navigation BackStack)

    Frame是在应用程序启动被创建,Frame为页面Page充当容器,同时当你导航到其他页面,它会保存一个导航历史。

    例子:1)在页面中导航,C#代码如下:

    private void itemListView_ItemClick(object sender, ItemClickEventArgs e)
     {
         // Navigate to the appropriate destination page, configuring the new page
         // by passing required information as a navigation parameter
         var itemId = ((MyListViewItem)e.ClickedItem).UniqueId;
         Frame.Navigate(typeof(MyDetailPage), itemId);
     }

    2)导航后退,C#代码:

    private void btnGoBack_Click(         object sender, RoutedEventArgs e)
     {
       if (this.Frame.CanGoBack)
          this.Frame.GoBack();
     }

    3、返回键注意项

     1)标准的Windows Phone UX(用户体验)是使用返回键导航背部或关闭瞬间UI。默认情况下,返回键导致导航回到以前的应用程序 ,而不是页面!
     2)在Windows Phone的商店应用程序,你必须包含的代码重写这导致应用程序中向后导航。
     3)不同于Windows Phone的Silverlight(即WP8设计): 在一个应用程序,倒着页面导航是默认该框架
     4)重写返回键:空白模板是不包含返回键的处理代码,而在Hub模板中包含NavigationHelper类,既可以正确向后页面导航。如果你需要重写返回键,替换你自己的代码自定义导航处理,下面是在一个页面中重写返回键C#代码:

    public sealed partial class SecondPage : Page
     {
         ...
    
         protected override void OnNavigatedTo(NavigationEventArgs e)
         {
             Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
         }
    
         protected override void OnNavigatedFrom(NavigationEventArgs e)
         {
             Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
         }
    
         async void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
         {
             e.Handled = true; // We've handled this button press
                
             // If the secondary UI is visible, hide it
             if (SecondaryUI.Visibility == Visibility.Visible )
             {
                FadeOutSecondaryStoryboard.Begin();
             }
             else
             {
                 // Standard page backward navigation
                 if (Frame.CanGoBack)
                    Frame.GoBack();
             }
         }

    如果整个APP都需求返回键重写,可以把类似代码写到APP.XAML.CS文件当中。

    4、页面缓存模式(Page Cache Mode)

    当你第一次导航到一个页面类型,一个新的实例(页面)被创建。当你离开此页面,该实例是否被缓存或被破坏由页面的NavigationCacheMode属性决定的

    NavigationCacheMode.Disabled:无论你导航向前或向后的页面,你得到的页面的新实例
    NavigationCacheMode.Enabled:页面可以被缓存,但当缓存超过一定数值(WP8.1中默认是1,是由Frame.CacheSize属性确定的),缓存实例将被丢弃

    NavigationCacheMode.Required:页面可以被缓存,而且不管框架(Frame.CacheSize)的大小,缓存的实例可以为每次访问重新应用,即页面的内容还是一样的。

    5、NavigationHelper类 

    可以使用 NavigationHelper类 来保存和重载入页面的状态。在基础页面模板中,会自动载入NavigationHelper类 ,我们可以借此来载入此类。

     

  • 相关阅读:
    Sublime Text3 配置 Lua5.3.5开发环境
    Unity项目
    Unity项目
    C#简介
    Unity
    【数据结构与算法】分治思想经典题总结
    【数据结构与算法】数学题经典题总结
    【java I/O流总结】PrintWriter总结
    【java I/O流总结】基于源码比较FileReader和BufferReader
    【java I/O流总结】字符流文件读写
  • 原文地址:https://www.cnblogs.com/NEIL-X/p/4006826.html
Copyright © 2011-2022 走看看