Показать кнопку «Назад», даже если в задней стопке нет страниц

Я создаю приложение Master/Details с помощью шаблона 10. Образец шаблона Master/Details 10 использует CommandBar, чтобы получить полный контроль над тем, когда отображается кнопка «Назад», но я хотел бы показать кнопку «Назад» на PageHeader или на оболочка. Проблема в том, что из-за отсутствия заднего стека кнопка отказывается отображаться. Как мне справиться с этим?


person Owen D.    schedule 14.02.2016    source источник


Ответы (2)


Переопределите событие OnNavigatedTo и задайте для AppViewBackButtonVisibility значение Visible в файле кода программной части для каждой страницы, на которой вы хотите включить кнопку возврата в строке заголовка.

Посмотрите здесь: http://grogansoft.com/blog/?p=1116.

Важная часть "AppViewBackButtonVisibility"

if (rootFrame.CanGoBack)
{
    // Show UI in title bar if opted-in and in-app backstack is not empty.
    SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = 
        AppViewBackButtonVisibility.Visible;
}

Я также предлагаю вам взглянуть на свойства AppBar. Особенно видимость, которая получает или устанавливает видимость UIElement, и вы можете принудительно установить видимость элемента:

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.appbar.aspx

person Tobias Kullblikk    schedule 14.02.2016
comment
У меня по-прежнему возникают проблемы с отображением кнопки «Назад» PageHeader. Вот код, который запускается, когда приложение переходит к просмотру сведений, и я хочу отобразить кнопку «Назад» в заголовке страницы: SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; Template10.Common.BootStrapper.Current.ShowShellBackButton = false; Template10.Common.BootStrapper.Current.UpdateShellBackButton(); Template10.Common.BootStrapper.Current.NavigationService.Refresh(); - person Owen D.; 15.02.2016
comment
Я думаю, что ваш ответ относится к стандартному UWP, а не к API Template10. Я также ищу решение этого. - person Real World; 20.02.2016

Поэтому я создал хакерское решение для этого. По сути, я добавляю фиктивное значение в стек, чтобы кнопка «Назад» думала, что есть к чему вернуться.

var entry = new PageStackEntry(typeof(bool), null, null);
Frame.BackStack.Insert(0, entry);

Затем я добавил событие BootStrapper.BackRequested, которое устанавливает HandledEventArgs.Handled в true, поэтому Template10 на самом деле не открывает страницу. Таким образом, у меня есть полный контроль над задним стеком и задней видимостью.

person Real World    schedule 20.02.2016
comment
Я зарегистрировал прослушиватель для BootStrapper.BackRequested, но BackRequested, похоже, не происходит при нажатии кнопки возврата PageHeader... Я установил точку останова в своем методе обработки для BackRequested, и он не срабатывает, он просто не получается: at Windows.UI.Xaml.Controls.Frame.GoBack() at Template10.Services.NavigationService.FrameFacade.GoBack() at Template10.Services.NavigationService.NavigationService.GoBack() at Template10.Behaviors.NavButtonBehavior.Element_Click(Object sender, RoutedEventArgs e) - person Owen D.; 21.02.2016
comment
Я использую самый последний выпуск NuGet Template 10. Возможно, это что-то исправлено в более позднем коде GitHub и еще не включено в NuGet? Я наткнулся на это: github.com/Windows-XAML/Template10/issues/454 - person Owen D.; 21.02.2016
comment
Не обращайте внимания на мой предыдущий комментарий; Я обновился до версии 1.1.4, выпущенной вчера, и теперь я вообще не могу нажать кнопку «Назад» PageHeader. Хм. - person Owen D.; 22.02.2016
comment
Я использую 1.1.3, и у меня не было проблем с тем, что событие не вызывалось - person Real World; 22.02.2016