[Win8]Windows8開發筆記(六):頁面導航的基礎與深入

來源:互聯網
上載者:User

Windows8中是沒有對話方塊的概念的,不同的介面有不同的頁面,類似於網頁一樣的瀏覽模式。

通過Frame.Navigate(typeof(TestPage),obj)的方式來實現不同頁面的導航。

NavigationServer的屬性方法有:

GoBack()後退,GoForward()前進,CanGoBack()判斷是否可以後退。

頁面導航預設是不啟用緩衝的,也就是後退之後的前一個頁面恢複成原始的狀態。

如果需要開啟,在建構函式中可以使用以下代碼:

            NavigationCacheMode = NavigationCacheMode.Enabled;

下面建立一個項目TestNavigation來說明導覽列的使用。

給項目添加兩個空白頁面MainPage1和MainPage2和MainPage3來進行測試:


在App.xaml.cs將啟動版面設定為MainPage1(找到typeof,將MainPage改成MainPage1即可)。

在MainPage1添加一個按鈕來跳轉到Page3。

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">        <Button Content="Go to Page3" HorizontalAlignment="Left" Margin="200,100,0,0"                 VerticalAlignment="Top"/>    </Grid>

雙擊該按鈕,設定點擊之後的方法:

private void Button_Click_1(object sender, RoutedEventArgs e)        {            Frame.Navigate(typeof(MainPage3));        }

這樣運行項目,點擊之後便會發現自動跳轉到了對應的介面。

接下來,在MainPage3的頁面上加一個後退按鈕:

        <Button Content="Back" HorizontalAlignment="Left" VerticalAlignment="Top"/>

雙擊該按鈕如下添加代碼:

private void Button_Click_1(object sender, RoutedEventArgs e)        {            Frame.GoBack();        }

運行項目,則點擊該按鈕可以後退。

如此便實現了兩個頁面的導航,而這個Frame是Page類的一個屬性。

那麼怎麼給頁面傳參呢?

其實Navigate方法還有一個重載方法:

        public bool Navigate(Type sourcePageType);        public bool Navigate(Type sourcePageType, object parameter);

也就是說第二個參數傳什麼都可以,是一個object對象。

那麼我們下面來做一個測試。

首先是在MainPage1.xaml添加兩個按鈕,都是跳轉到MainPage3但是傳的參數不一樣:

 <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">        <Button Content="Go to Page3-1" HorizontalAlignment="Left" Margin="200,100,0,0"                 VerticalAlignment="Top" Click="Button_Click_1"/>        <Button Content="Go to Page3-2" HorizontalAlignment="Left" Margin="200,200,0,0"                 VerticalAlignment="Top" Click="Button_Click_2"/>    </Grid>

頁面效果


雙擊第一個按鈕,將其中代碼改成:

private void Button_Click_1(object sender, RoutedEventArgs e)        {            Frame.Navigate(typeof(MainPage3),"請叫我汪海");        }

雙擊第二個按鈕,將其中代碼改成:

private void Button_Click_2(object sender, RoutedEventArgs e)        {            Frame.Navigate(typeof(MainPage3), "請還是叫我汪海");        }

這樣我們就給Page3傳了不同的參數。

那麼接下來我們在Page3的OnNavigatedTo接受相應的資料。

先把返回的按鈕賦值Name="btn",然後我們把接受到的資料顯示在btn上面:

 protected override void OnNavigatedTo(NavigationEventArgs e)        {            //e.Parameter代表傳來的參數            btn.Content = e.Parameter;        }

此時運行項目,就可以看見跳轉後的頁面顯示傳參的內容了:



下面來看一下如何使用導覽列的緩衝功能。

在Page1上放置兩個文字框和一個按鈕來改變第二個文字框的值:

  <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Margin="-800,0,0,0" TextWrapping="Wrap"                 Text="" />        <TextBox x:Name="text2" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="-800,100,0,0" TextWrapping="Wrap"                 Text="TextBox" />        <Button HorizontalAlignment="Center" Content="Change!" VerticalAlignment="Center" Margin="-800,200,0,0"></Button>

雙擊按鈕添加方法:

private void Button_Click_3(object sender, RoutedEventArgs e)        {            text2.Text = "Hello,why!";        }

運行項目,點擊按鈕,發現文字框的內容改成了Hello,why!但是如果跳轉到Page3再返回就會發現原本的內容又不見了。

如果想保留裡面的內容,就要啟用緩衝。

在構造方法中添加以下代碼:

public MainPage1()        {            this.InitializeComponent();            NavigationCacheMode = NavigationCacheMode.Enabled;        }

這樣就可以保留相關的資訊了。

接下來再看一看導航模式。

OnNavigatedTo在剛進來或者從其他頁面裡面返回過來的時候都可以調用。

一共有Back,Forward,New,Refresh四種情況,一般在New的時候才重新載入資料:

 protected override void OnNavigatedTo(NavigationEventArgs e)        {            if (e.NavigationMode == NavigationMode.New)            {                //第一次進入這個頁面,此時才載入資料。            }        }

還有兩個方法:

1.OnNavigatedFrom:當頁面不再是活動頁面時調用,

2.OnNavigatingFrom:在頁面即將不是活動頁面的。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.