Как пропустить страницу при обратной навигации в Windows Phone 7 - PullRequest
2 голосов
/ 19 августа 2010

Я занимаюсь разработкой приложения для Windows Phone 7. Поэтому моя целевая страница - это пользовательская страница Splash Screen (я не использовал способ отображения заставки по умолчанию, т. Е. Файл png, так как мне нужно добавить данныев заставке во время выполнения на основе профиля пользователя).Итак, я создал страницу с заставкой.После некоторой задержки (5 секунд) я перехожу на свою главную страницу.используя

PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame;
 root.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));

Теперь, если пользователь нажимает кнопку возврата на телефоне, по умолчанию он переходит на заставку, но я хочу, чтобы приложение закрывалось.

Как мне этого добиться..

Ответы [ 4 ]

4 голосов
/ 13 ноября 2010

У меня был похожий сценарий, и вот исправление, которое я использовал.

Для страницы, которую я хотел пропустить после перехода назад, я добавил переменную-член bool, которая определяет, будем ли мы загружать содержимое страницыили вернитесь на предыдущую страницу.Этот метод работает и, по-видимому, не оказывает вредного влияния на приложение, но может быть лучшее решение.Предложения по лучшему методу приветствуются.

public partial class LoginPage : PhoneApplicationPage
{
    private bool _navigateBack;

    public LoginPage()
    {
        InitializeComponent();

        _navigateBack = false;
    }

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        if (_navigateBack)
        {
            this.NavigationService.GoBack();
        }
        else
        {
            _navigateBack = true;
            base.OnNavigatedTo(e);
        }
    }
}
3 голосов
/ 01 апреля 2013

К сожалению, решение jmason не будет работать на Windows Phone 8, поскольку вам не разрешено принудительно выходить из приложения, что означает, что вы не можете писать this.NavigationService.GoBack(); на заставке.Лучшее (и работающее) решение - очистить стек навигации, когда вы закончите с заставкой.

На странице после заставки (обычно это главная страница):

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    // Calling the base class OnNavigatedTo method
    base.OnNavigatedTo(e);

    // Only clear the stack for 'new' (forward) and 'refresh' navigations
    if (e.NavigationMode == NavigationMode.New || e.NavigationMode == NavigationMode.Refresh)
        // For UI consistency, clear the entire page stack
        while (this.NavigationService.RemoveBackEntry() != null)
            // Do nothing
            ;
}
0 голосов
/ 28 марта 2014

Очень просто, просто добавьте это на страницу после заставки, т.е. вашу первую страницу

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        NavigationService.RemoveBackEntry();
    }

Здесь вы удалите заднюю запись на заставку.При повторном нажатии ваше приложение будет убито, вместо того, чтобы вернуться к всплеску.Удачного кодирования.

0 голосов
/ 02 марта 2013

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

Шаг 1: Добавьте код jmason

Шаг 2: Установить по умолчанию LayoutRoot скрытым

Visibility="Collapsed"

Шаг 3. В событии OnNavigatedTo покажите LayoutRoot, если флаг _navigateBack имеет значение false В событии OnNavigatedFrom повторно скрываем LayoutRoot

 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        if (_navigateBack)
        {
            this.NavigationService.GoBack();
        }
        else
        {
            LayoutRoot.Visibility = Visibility.Visible;
            _navigateBack = true;
            base.OnNavigatedTo(e);
        }
    }
    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
    {
        LayoutRoot.Visibility = Visibility.Collapsed;
    }
...