C# UWP屏幕后退按钮-如何触发系统后退事件?

C# UWP屏幕后退按钮-如何触发系统后退事件?,c#,uwp,uwp-xaml,C#,Uwp,Uwp Xaml,我有一个UWP应用程序-该设计在屏幕内容中有一个“后退”按钮,我想用它触发在我的app.xaml.cs文件中处理的系统导航事件。我当前的单击处理程序(粘贴到每个需要它的文件)是: Frame rootFrame = Window.Current.Content as Frame; if (rootFrame.CanGoBack) rootFrame.GoBack(); 我应该如何触发back事件,它将触发已经包含此代码的back事件处理程序?在App.xaml.cs中,将此添加到OnL

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

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

我应该如何触发back事件,它将触发已经包含此代码的back事件处理程序?

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

其中在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;
}

在App.xaml.cs中,将此添加到onLaunched(…):

其中在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;
}

你看过模板10了吗。它为您连接了所有锅炉铭牌代码。您看过模板10了吗。它为您连接了所有的锅炉板代码。我已经有了所有这些-我想做的是启动相同的
SystemNavigationManager.GetForCurrentView().从应用程序内容区域中的
HyperlinkButton
返回请求。检查可在HyperlinkButton的事件处理程序中调用的
TryGoBack
函数的更新解决方案。您的编辑重复了我的问题,但更明确地说明了这一点。我在需要它的每个页面代码隐藏文件中都有一个类似于
TryGoBack
-的方法。当您可以通过方法调用显式返回时,为什么要引发事件?但是,您可以通过添加一个自定义导航管理器来简化流程,也可以从可以管理一些常见导航逻辑的基本页面派生一个自定义页面。我已经拥有了所有这些-我想做的是启动相同的
SystemNavigationManager.GetForCurrentView().从应用程序内容区域中的
HyperlinkButton
返回请求。检查可在HyperlinkButton的事件处理程序中调用的
TryGoBack
函数的更新解决方案。您的编辑重复了我的问题,但更明确地说明了这一点。我在需要它的每个页面代码隐藏文件中都有一个类似于
TryGoBack
-的方法。当您可以通过方法调用显式返回时,为什么要引发事件?但是,您可以通过添加自定义导航管理器或从可以管理某些常用导航逻辑的基本页派生自定义页来简化流程,而不是复制逻辑。