#.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);
}