2015-03-13 3 views
2

Когда мое приложение запускается первым, у меня есть страница входа в систему. В окне входа в систему, если они могут войти в систему, я хочу удалить страницу входа и перейти на вкладку. На этой странице с вкладками у меня будет страница настроек, которая позволит мне вернуться на страницу входа в систему, если это необходимо. Сейчас у меня есть следующее, но оно не работает. Отображается HomePage, но появляется обратная стрелка на странице входа, и я не хочу этого.Xamarin.Forms удаляет страницу

public class LoginPage: ContentPage 
{ 
    public LoginPage() { // create controls here } 

    public btnLogin_Clicked(object sender, EventArgs e){ 
     Navigation.PopAsync(); // remove this page (doesn't work) 
     Navigation.PushAsync(new HomePage()); 
    } 
} 

public class App : Application 
{ 
    public App() 
    { 
     MainPage = new NavigationPage(new LoginPage()); 
    } 
} 

ответ

5

Xamarin.Forms 1.3 добавил возможность добавления и удаления страниц, сбрасывающих корень стека навигации, как вы предлагаете. Ваш код указывает, что вы используете хотя бы версию 1.3. Однако вызов PopAsync() сразу с места в карьер - это не тот метод, который вы хотите использовать, поскольку он не будет выходить из страницы, если он является единственной страницей в стеке. Вместо этого сначала используйте метод InsertPageBefore (newPage, pageToPutBefore) интерфейса INavigation, а затем введите страницу входа в конец стека.

Вы можете попробовать код, подобный этому:

public async void btnLogin_Clicked(object sender, EventArgs e) 
{ 
    // Do some login logic and if successful ... 
    Navigation.InsertPageBefore(new HomePage(), this); 
    await Navigation.PopAsync().ConfigureAwait(false); 
} 

Есть несколько новых методов в Xamarin.Forms 1.3, что существенно улучшить навигацию возможностей. Другим возможным решением вышеупомянутой проблемы было бы сначала добавить HomePage в конец стека, а затем использовать новый метод RemovePage, чтобы удалить страницу входа с начала стека, оставив HomePage как единственную оставшуюся страницу. Одна вещь, о которой вы хотите быть осторожной, если вы добавляете новую страницу с помощью асинхронного метода, такого как PushAsync, вам нужно будет позвонить, чтобы обеспечить завершение добавления новой страницы в стек перед удалением старой страницы.

+0

Это работало, большое спасибо! Что касается другого вашего решения, это не значит, что вместо этого отобразится кнопка «Назад» на странице входа? – user441521

+0

Да, в обоих случаях кнопка возврата может на короткое время отображаться на странице в верхней части стека. Я использую подобный метод, когда пользователь выходит из системы. Я вставляю страницу входа и вытаскиваю HomePage из стека, оставляя только страницу входа. –

+0

Тот же сценарий, что и OP. Спасибо за это! – devHead

0

Для вашего второго пункта, то стрелку назад на страницу входа показывает, и вы не хотите, чтобы >>

Используйте этот NavigationPage.SetHasBackButton (YourPage, ложь); Это позволит удалить кнопку назад из панели навигации

В качестве примера для кода выше,

  HomePage myHomePage = new HomePage(); 


     NavigationPage.SetHasNavigationBar(myHomePage , false); 

     Navigation.PushAsync(myHomePage); 

Вы можете изучить больше методов NavigationPage - таких, как SetHasNavigationBar и многие другие, они действительно хороши.

Пожалуйста, дайте мне знать, если это поможет.

2

Еще одно решение: Изменить MainPage свойство

  • в App.cs Конструктора:

    общественного App() { MainPage = новый LoginPage(); }

  • в методе Вход:

    Device.BeginInvokeOnMainThread(() => 
        { 
         Application.Current.MainPage = new NavigationPage(new HomePage()); 
        }); 
    
+0

Обычно я использую это решение, но знаете ли вы, как я могу очистить LoginPage в вашем примере после вызова Application.Current.MainPage = new NavigationPage (new HomePage()); ? –

Смежные вопросы