wp8.1开发教程一: 页面导航和页面间值传递

作者:袖梨 2022-06-26

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的视频所学到的如果有什么不对欢迎指出


理论知识

一、页面导航

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

wp8.1开发教程一: 页面导航和页面间值传递

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类 我们可以借此来载入此类。

相关文章

精彩推荐