none
windows应用商店APP页面导航 RRS feed

  • 问题

  • 从MainPage导航到NewPage:

    public sealed partial class MainPage : Page
    {
        static public MainPage Current;
    
        public MainPage()
        {
            this.InitializeComponent();
            Current = this;
        }
    }

    private void button_callNewPage_Click(object sender, RoutedEventArgs e)
    {
        Person person = new Person() { Name = "Test", Age = 29 };
        bool b = this.Frame.Navigate(typeof(NewPage), person);
    }

    NewPage接收参数:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
    
        if (e.Parameter is Person)
        {
            Person p = e.Parameter as Person;
        }
    }

    NewPage返回到MainPage:

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

    问题:

    1、从NewPage返回到MainPage时,如何传回想要的数据。

    2、在windows 8.1上运行时,从NewPage返回到MainPage时,MainPage从新初始化了(Windos Phone不会重新初始化),如何实现返回时MainPage不重新初始化。



    • 已编辑 oneonce 2015年3月11日 14:04
    2015年3月11日 13:59

答案

  • (1) 傳自訂型別的參數, 在 Suspending 時會發生例外, 在 Frame.Navigate(TypeName, Object) Method

    的備註:

    当应用程序挂起时,应用程序通常使用 GetNavigationState 来序列化帧的状态。你可以在应用程序代码中直接执行该操作,或通过使用由 Visual Studio 应用程序模板生成的 SuspensionManager 类间接执行该操作。要使用 GetNavigationState 启用框架状态的序列化,必须只将基本类型用于导航参数,例如字符串,字符,数字和 GUID 类型。否则,当应用程序挂起时,GetNavigationState 将引发异常。如果你不使用 GetNavigationState,该参数可能具有其他类型。

    (2)要保持原來的執行個體不被移除, 設定 Page.NavigationCacheMode property


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已标记为答案 oneonce 2015年3月11日 14:31
    2015年3月11日 14:10

全部回复

  • (1) 傳自訂型別的參數, 在 Suspending 時會發生例外, 在 Frame.Navigate(TypeName, Object) Method

    的備註:

    当应用程序挂起时,应用程序通常使用 GetNavigationState 来序列化帧的状态。你可以在应用程序代码中直接执行该操作,或通过使用由 Visual Studio 应用程序模板生成的 SuspensionManager 类间接执行该操作。要使用 GetNavigationState 启用框架状态的序列化,必须只将基本类型用于导航参数,例如字符串,字符,数字和 GUID 类型。否则,当应用程序挂起时,GetNavigationState 将引发异常。如果你不使用 GetNavigationState,该参数可能具有其他类型。

    (2)要保持原來的執行個體不被移除, 設定 Page.NavigationCacheMode property


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已标记为答案 oneonce 2015年3月11日 14:31
    2015年3月11日 14:10
  • (1) 傳自訂型別的參數, 在 Suspending 時會發生例外, 在 Frame.Navigate(TypeName, Object) Method

    的備註:

    当应用程序挂起时,应用程序通常使用 GetNavigationState 来序列化帧的状态。你可以在应用程序代码中直接执行该操作,或通过使用由 Visual Studio 应用程序模板生成的 SuspensionManager 类间接执行该操作。要使用 GetNavigationState 启用框架状态的序列化,必须只将基本类型用于导航参数,例如字符串,字符,数字和 GUID 类型。否则,当应用程序挂起时,GetNavigationState 将引发异常。如果你不使用 GetNavigationState,该参数可能具有其他类型。

    (2)要保持原來的執行個體不被移除, 設定 Page.NavigationCacheMode property


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    非常感谢你的回复,目前没有用this.Frame.Navigate,而是用Frame.Navigate。

    我在想微软为什么不为GoBack()提供多个重载,和Navigate一样可以传递参数。

    2015年3月11日 14:31