Существует ли событие навигации «До»?

#.net #wpf #navigation #navigationservice

#.net #wpf #навигация #navigationservice

Вопрос:

Я использую WPF с навигационной службой. Мне нужно уловить ситуацию до перехода к следующей странице. Есть ли какое-либо событие «до» перехода на следующую страницу?

 Navigate("MyPage1.xaml")
Navigate("MyPage2.xaml")'now, I need a event which shows me : FromPage("MyPage1.xaml") before navigating to "MyPage2.xaml".
  

пример кода

 Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    Application.NavigationService = Me.ContentFrame.NavigationService
End Sub

Class Application
    ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException
    ' can be handled in this file.
    Public Shared NavigationService As NavigationService
End Class



Private Sub ContentFrame_Navigated(ByVal sender As Object, ByVal e As System.Windows.Navigation.NavigationEventArgs) Handles ContentFrame.Navigated
    If Application.cLang Is Nothing Then Call InitializeLanguage()
    'The following Welcome page is never visible because e.Uri is always the NEXT page
    If e.Uri IsNot Nothing AndAlso (e.Uri.ToString.Contains("Pages/PageWelcome.xaml")) Then
        Call UpdateLanguageCombobox()
    End If
End Sub



Private Sub ContentFrame_Navigating(ByVal sender As Object, ByVal e As System.Windows.Navigation.NavigatingCancelEventArgs) Handles ContentFrame.Navigating
    Dim Uri As Uri = CType(sender, Frame).Source
    If Application.cLang Is Nothing Then Call InitializeLanguage()
    'The following Welcome page is never visible because e.Uri is always the NEXT page
    If e.Uri IsNot Nothing AndAlso (e.Uri.ToString.Contains("Pages/PageWelcome.xaml")) Then
        'Call UpdateLanguageCombobox()
    End If
End Sub
  

Ответ №1:

Да! Попробуйте событие навигации. Оно возникает при запросе навигации. Более подробную информацию о событиях NavigationServices можно найти в разделе «Примечания»http://msdn.microsoft.com/en-us/library/ms615518.aspx.

Комментарии:

1. Привет, Бен. Проблема в том, что «Навигация» также содержит только следующую, а не текущую страницу. о, черт, я был на линии… В этом случае я могу просто вызвать ?CType(sender, Frame).Source.ToString . спасибо за ваш совет.

2. Ок, попробовал. Извините, но проблема в том, что в любом случае Uri всегда содержит URL, который необходимо загрузить. Я не могу видеть текущий или последний uri. ?CType(sender, Frame).Source.ToString не работает.

3. Попробуйте привести sender к типу NavigationWindow, а затем получить доступ к свойству CurrentSource.

4. Привет, Бен. В одном сообщении до и в другом сообщении до того, как я написал, что я сделал это, но он поддерживает только «следующий» uri, не текущий. Спросите меня, почему? Я не знаю. Но оно непригодно для использования. приведение фрейма не работает. Возможно, «NavigationWindow» может быть чем-то другим? Но у меня есть только один элемент управления фреймом для навигации. Я перемещаюсь с помощью Frame.Source = Uri возможно, это неправильно?

5. Не могли бы вы, пожалуйста, предоставить пример кода того, как вы настраиваете / регистрируете свой обработчик событий?

Ответ №2:

В Silverlight есть событие «OnNavigatedFom», которое происходит перед переходом на эту страницу.. Надеюсь, что это может быть то же самое и для WPF..

 protected override void OnNavigatedFrom(NavigationEventArgs e) {
    base.OnNavigatedFrom(e);
}