【问题标题】:UWP - Run code once per page navigateUWP - 每页导航运行一次代码
【发布时间】:2018-03-23 20:00:40
【问题描述】:

这是一个简单的问题,但我仍然无法谷歌解决。 C# UWP 应用中的哪些事件在每个页面导航中仅运行一次。

我在之后添加了一个用于返回导航的事件处理程序:

this.InitializeComponent();

在页面构造函数中。

如果我在第一页和第二页来回两次,它会抛出一个错误,调试发现处理返回导航的事件被调用了两次,因为页面构造函数中的代码也运行了两次。

那么在哪种情况下我可以编写我只想在每个页面导航中运行一次的代码。或者 ASP.net 中是否有类似下面的内容?

if (!Page.isPostback) {
   //do something
}

【问题讨论】:

    标签: c# uwp navigation initialization back-button


    【解决方案1】:

    您可以在页面类上覆盖一个虚拟方法:OnNavigatedTo,当页面完成加载并成为父框架的源时,框架将调用该方法。

    https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.page.onnavigatedto#Windows_UI_Xaml_Controls_Page_OnNavigatedTo_Windows_UI_Xaml_Navigation_NavigationEventArgs_

    【讨论】:

    • 这是我放置原始代码以使后退按钮可见并处理该事件的地方。但是下次我转到该页面并再次单击后退时,它会尝试运行后退按钮事件处理程序两次,因为 OnNavigatedTo 添加了两次事件处理程序。
    • 很好@ShahidThaika 只需在 OnNavigatedFrom 方法中分离您的事件处理程序:docs.microsoft.com/en-us/uwp/api/…
    • 我确实想到了这一点,但希望有一个更清洁更好的解决方案。唉!!
    【解决方案2】:

    虽然我接受了另一个答案,但在我的具体情况下,以下代码更好,因为它会检查是否设置了后退按钮处理程序。

        private void App_BackRequested(object sender, BackRequestedEventArgs e)
        {
            Frame rootFrame = Window.Current.Content as Frame;
            if (rootFrame == null)
                return;
    
            // If we can go back and the event has not already been handled, do so.
            if (rootFrame.CanGoBack && e.Handled == false)
            {
                e.Handled = true;
                rootFrame.GoBack();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      相关资源
      最近更新 更多