【问题标题】:UWP on screen back button - how to trigger system back event?UWP 屏幕后退按钮 - 如何触发系统后退事件?
【发布时间】:2017-08-01 09:33:04
【问题描述】:

我有一个 UWP 应用程序 - 该设计在屏幕内容中有一个“后退”按钮,我想用它来触发在我的 App.xaml.cs 文件中处理的系统导航事件。我当前粘贴到每个需要它的文件的点击处理程序是:

Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame.CanGoBack)
    rootFrame.GoBack();

我将如何触发返回事件,这将触发已经包含此代码的返回事件处理程序?

【问题讨论】:

  • 你看过模板 10 了吗?它为你连接了所有这些样板代码。

标签: c# uwp uwp-xaml


【解决方案1】:

在 App.xaml.cs 中,将其添加到 OnLaunced(...):

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    ...
    if (rootFrame == null)
    {
        ...
        // Register a handler for BackRequested events
        SystemNavigationManager.GetForCurrentView().BackRequested += this.OnBackRequested;
    }
    ...
}

OnBackRequested(...)中的位置,也可以在App.xaml.cs中:

private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;

    if (rootFrame.CanGoBack)
    {
        e.Handled = true;
        rootFrame.GoBack();
    }
}

如果您实现任何自定义导航,这可以很容易地适应支持多个框架,并且您还可以通过以下方式添加显示/隐藏后退按钮的全局处理:

public void UpdateBackButton(Frane frame)
{
    bool canGoBack = (frame?.CanGoBack ?? false);

    SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = canGoBack
        ? AppViewBackButtonVisibility.Visible
        : AppViewBackButtonVisibility.Collapsed;
}

您可以通过 App.xaml.cs 或自定义导航管理器中的此类函数以编程方式回调:

public bool TryGoBack(Frame frame)
{
    bool handled = false;

    if (frame?.CanGoBack ?? false)
    {
        handled = true;
        frame.GoBack();
    }

    this.UpdateBackButton(frame);

    return handled;
}

【讨论】:

  • 我已经拥有了所有这些 - 我想做的是从应用内容区域中的 HyperlinkButton 中触发相同的 SystemNavigationManager.GetForCurrentView().BackRequested
  • 检查可在 HyperlinkBut​​ton 的事件处理程序中调用的 TryGoBack 函数的更新解决方案。
  • 您的编辑重复了我的问题,但更明确地说明了。我在每个需要它的页面代码隐藏文件中都有一个TryGoBack-like 方法。
  • 当您可以通过方法调用显式返回时,为什么还要引发事件?但是,您可以通过添加自定义导航管理器或从可以管理一些常见导航逻辑的基本 Page 派生自定义 Page 来简化流程,而不是复制逻辑。
猜你喜欢
  • 2014-12-16
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多