Почему на моей модальной странице есть кнопка "Назад"? - PullRequest
0 голосов
/ 15 мая 2018

Проект и объяснение проблемы

В моем случае у меня есть страница, которая инструктирует пользователя, как перемещать определенную машину.Предполагается, что эта страница является модальной, поскольку ее нельзя перемещать без выполнения или полной отмены действия.

enter image description here У меня есть главная страница со списком, который открываетсястраница сведений о любом из элементов, содержащихся в просмотре списка, при щелчке по методу onSelect:

Navigation.PushAsync(new FooPage(string Name)); /* gets called in the 
onSelect method if selection is not null*/

Модель извлекается из модели представления страницы сведений после передачи ей имени и последующего использования инженера менеджера моделей.в модель представления с Unity для ее извлечения.

- теперь у нас есть и главная страница, и страница сведений в стеке, которая имеет кнопку только из страницы сведений -

На странице сведений мы имеемКнопка под названием «Teach» с полем ax, y, z рядом с ней, после нажатия на которую вызывается этот метод:

private async Task Button_Clicked(object sender, EventArgs e)
        {
            await Navigation.PushModalAsync(new ManualTeachPage());
        }

, который затем, как и положено, создает страницу, но затем по какой-то причине решает добавитькнопка возврата к нему: Uwp backbutton is visible

Отладка и исследования

Это поведение не отображаетсяна Android, у которого нет видимой кнопки «Назад» или панели навигации на этой странице, но также имеется кнопка на странице Details .

Я использовал модальные страницы ранее, но яЯ никогда не видел такого поведения, я пытался использовать свойство Navigation самой страницы Application.Mainpage, которое приводило к точно такому же результату, за исключением одного случая.

Я думал, что это может иметь какое-то отношение к моему переключениюодна страница Application.Main в одной точке (есть стопка страниц учебника, через которую пользователь должен пройти), похоже на вызов pushModalAsync в одну строку ПОСЛЕ установки новой главной страницы, затем она НАДВИГАЕТ страницу как модальную страницу и работает как одна(без кнопки возврата), но не делает этого после этого момента.

Нет сообщений об ошибках в Bugzilla по этому поводу, насколько я видел, и я не нашел ничего в Интернете об этой конкретной проблеме.

Обратите внимание, что при нажатии кнопки «Назад» на веб-странице teachPage происходит возврат на страницу сведений.Когда преподаваемую страницу толкают, она фактически выталкивается на ModalStack.

update 1

Еще раз проверяется, была ли модальная страница, о которой я говорил, единственной модальной страницейна модальном стеке это было.NavigationPage.SetHasBackButton (this, false);кажется, не работает ни как предложено Диего Рафаэль Соуза.

обновление 2

Я думал, что я временно отключу кнопку с помощью onBackButtonPressed на странице обучения, пока янашел решение.Оказывается, это больше не работает для UWP, этот метод больше не вызывается на этой или любой другой странице.Это работает для кнопки Android Hardware.

обновление 3

Я пытался использовать:

SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = 
AppViewBackButtonVisibility.Collapsed;

Это скрывает кнопку на UWPно по какой-то причине #if WINDOWS_UWP не работает вообще.Если я сделаю это без # если программа не будет собираться для Android.Решения пока нет, не только это, но и при использовании этого исправления на других страницах по-прежнему отключен метод onBackButtonPressed.

обновление 4

после обновления до последней версии xamarinФормы OnBackButtonPressed начали работать снова.Кнопка все еще отображается на странице, но теперь я ее отключил.

Воссоздание проблемы

Я воссоздал проблему в этом небольшом тестовом проекте: https://www.dropbox.com/sh/6btsud3uvw503ee/AAAiaGb3TwhMrZMJb2j-rd36a?dl=0

1 Ответ

0 голосов
/ 17 мая 2018

В вашей функции Button_Clicked() в вашем примере, на странице DetailPage, где вы вызываете свой модал, сразу после вызова PushModalAsync(new TeachPage()); используйте:

NavigationPage.SetHasNavigationBar(this, false);
NavigationPage.SetHasBackButton(this, false);

Я думаю, вы пытались использоватьВыше SetHasBackButton, вы делали это на самом Модале, но кнопка «Назад», которую вы на самом деле видели, появилась на вашей странице DetailPage.

Как только вы добавите это, появится модальное окно и кнопка «Назад» исчезнет.Если вы установите кнопку «Назад» на своем модале, чтобы закрыть ее, вы можете легко вернуть ваши NavBar и BackButton в DetailPage, добавив функцию OnAppearing() в свой код DetailPage, например, так:

protected override void OnAppearing()
{
    base.OnAppearing(); // do the usual stuff OnAppearing does
    NavigationPage.SetHasNavigationBar(this, true); //get your navbar back
    NavigationPage.SetHasBackButton(this, true); //get your back button back
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...