WPF 使用NavigationWindow实现MainWindow传参到Page

先参考的别人的代码:

WPF学习之页间导航与页间数据传递 

在WPF中可以非常简单的实现窗口页间的导航:这里有三种方法:

1、Page调用NavigationService.Navigate

新建项目,并新建一个NavigationWindow的窗体作为主窗体,并将Source指向page1.xaml

然后新建一个页面page1,(做为主窗体的主题内容。) 在page1上方一个button1

然后新建另一个页面page2,在page2上放一个button2,

在button1 的click事件中就可以写实现转向的方法:

Page2 p=new Page2();

this.NavigationService.Navigate(page2);

以上两行代码等价于

this.NavigationService.Navigate(new uil("page2.xaml",UriKind.Relative));

2、xaml中使用Hyperlink标签:

<Hyperlink NavigateUri="page2.xaml">

3、NavigationWindow的导航日志

返回上一页:this.NavigationService.GoBack

 向前下一页:this.NavigationService.GoForward

 

 已上是页面之间导航,同时在转向的同时最常见的就是要数据传递:

 一.通过NavigationService.Navigate传递参数

  1.首先new一个page对象:

          Page2 page2 = new Page2();

  2.通过NavigationService.Navigate传递参数

          this.NavigationService.Navigate(page2,"frompage1");

  3.在Page2,处理NavigationWindow的LoadCompleted事件

          this.NavigationService.LoadCompleted += new LoadCompletedEventHandler(page2_LoadCompleted);

  4.在page2_LoadCompleted方法里获取传递过来的参数       

          void page2_LoadCompleted(object sender,NavigationEventArgs e)

    {

      if(e.ExtraData != null)

      {

                     string args = e.ExtraData.toString();

      }

          }

 二、通过构造函数传递参数(最易使用)

  首先new一个page对象并用NavigationService.Navigate转向

    Page2 page2 = new Page2("frompage1");

    this.NavigationService.Navigate(page2);

     在page2中定义构造函数

    public Page2(string args)

    {

      string args2 = args;

    }

 

 三、通过Application.Properties的全局数据

   用实例或URI导航到页面

          Application.Properties["Args"] = "frompage2";

     Page2 page2 = new Page2();

          this.NavigationService.Navigate(page2);

   在page2页面检查参数值

              if(Application.Properties["Args"] != null)

     {

      string arg = Application.Properties["Args"];

     }

 

 

自己的需要,从MainWindow传参到Page页面

MainWindow:

<NavigationWindow x:Class="NavagationTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:NavagationTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    
</NavigationWindow>

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace NavagationTest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : NavigationWindow

    {

        int a = 10;
        public MainWindow()
        {
            InitializeComponent();
            //this.frmMain.Navigate(new Uri("WelcomePage.xaml", UriKind.Relative));
            WelcomePage welcomePage = new WelcomePage(a);

            this.NavigationService.Navigate(welcomePage);
        }
    }
}
 

 

Page页面:

<Page x:Class="NavagationTest.WelcomePage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:NavagationTest"
      mc:Ignorable="d" 
      d:DesignHeight="450" d:DesignWidth="800"
      Title="WelcomePage">

    <Grid Background="Pink">
        
    </Grid>
</Page>
 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace NavagationTest
{
    /// <summary>
    /// WelcomePage.xaml 的交互逻辑
    /// </summary>
    /// 
    
    public partial class WelcomePage : Page
    {
        int rec = 0;
        public WelcomePage(int a)
        {
            InitializeComponent();
            rec = a;
            Console.WriteLine(rec);
        }
    }
}

 

这样Page页面就能接收到MainWIndow传来的参数
 

发布了45 篇原创文章 · 获赞 26 · 访问量 20万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览