2010-08-19 2 views
2

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

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

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

Как я могу достичь этого. ,

ответ

4

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

Для страницы, на которой я хотел пропустить навигацию назад, я добавил переменную члена 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); 
     } 
    } 
} 
0

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

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

Шаг 2: Установите значение по умолчанию LayoutRoot для скрытой

Visibility="Collapsed" 

Шаг 3: В случае OnNavigatedTo, показать LayoutRoot если флаг _navigateBack ложно. В случае 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; 
    } 
3

К сожалению, решение 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

Работает как очарование! – christoph

0

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

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

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

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