天天看點

在WPF的Page中的導航

首先在Page頁中加一個<Hyperlink>的标簽,再添中一個Click事件,指向背景處理程式。如下:

<Hyperlink Click="hyperlink_Click">你好</Hyperlink>

在.cs檔案中,需要引入 using System.Windows.Navigation命名空間   

然後處理事件,也就是主體了。     

void hyperlink_Click(object sender, RoutedEventArgs args)  

{

}

有四種方法(事例中是由目前頁向Page4導航),如下:

1、

           Page4 page = new Page4();

            NavigationService ns = NavigationService.GetNavigationService(this);

            ns.Navigate(page);

2、

            NavigationService ns = NavigationService.GetNavigationService(this);

            ns.Source = new Uri("Page4.xaml", UriKind.Relative);

3、

           NavigationService ns = NavigationService.GetNavigationService(this);

            ns.Content = new Page4();

4、

            Page4 page = new Page4();

            this.NavigationService.Navigate(page);

   5、     this.NavigationService.Refresh();//導航到本頁

如果想緩存浏覽過的頁面可以在Page頭中設定:

<Page

    x:Class="BrowserApp"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    WindowTitle="Page3"

    KeepAlive="True">     

</Page>

如果想減少記憶體的開銷,可以使用這個方法(注意文中黑體字):

public static readonly DependencyProperty RetainedStateDP;

   using System;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Navigation;

public partial class RetainedStateDPPage : System.Windows.Controls.Page

{

    public static readonly DependencyProperty RetainedStateDP;

    static RetainedStateDPPage()

    {

        RetainedStateDPPage.RetainedStateDP =

            DependencyProperty.Register(

                "RetainedState",

                typeof(string),

                typeof(RetainedStateDPPage),

                new FrameworkPropertyMetadata(

                    null,

                    FrameworkPropertyMetadataOptions.Journal));

    }

   public RetainedStateDPPage()

    {

        InitializeComponent();

    }

    public string RetainedState

    {

        get

        {

            return (string)base.GetValue(RetainedStateDPPage.RetainedStateDP);

        }

        set

        {

            base.SetValue(RetainedStateDPPage.RetainedStateDP, value);

        }

    }

}