// // NavigationHelper.h // Deklaration der NavigationHelper-Klasse und verknüpfter Klassen // #pragma once #include "RelayCommand.h" namespace $safeprojectname$ { namespace Common { /// /// Klasse, die zum Speichern der erforderlichen Ereignisdaten verwendet wird, wenn eine Seite versucht, den Zustand zu laden. /// public ref class LoadStateEventArgs sealed { public: /// /// Der an übergebene Parameterwert /// übergeben wurde, als diese Seite ursprünglich angefordert wurde. /// property Platform::Object^ NavigationParameter { Platform::Object^ get(); } /// /// Ein Wörterbuch des Zustands, der von dieser Seite während einer früheren /// beibehalten wurde. Beim ersten Aufrufen einer Seite ist dieser Wert NULL. /// property Windows::Foundation::Collections::IMap^ PageState { Windows::Foundation::Collections::IMap^ get(); } internal: LoadStateEventArgs(Platform::Object^ navigationParameter, Windows::Foundation::Collections::IMap^ pageState); private: Platform::Object^ _navigationParameter; Windows::Foundation::Collections::IMap^ _pageState; }; /// /// Repräsentiert die Methode, mit der das -Ereignis behandelt wird /// public delegate void LoadStateEventHandler(Platform::Object^ sender, LoadStateEventArgs^ e); /// /// Klasse, die zum Speichern der erforderlichen Ereignisdaten verwendet wird, wenn eine Seite versucht, den Zustand zu speichern. /// public ref class SaveStateEventArgs sealed { public: /// /// Ein leeres Wörterbuch, das mit dem serialisierbaren Zustand aufgefüllt wird. /// property Windows::Foundation::Collections::IMap^ PageState { Windows::Foundation::Collections::IMap^ get(); } internal: SaveStateEventArgs(Windows::Foundation::Collections::IMap^ pageState); private: Windows::Foundation::Collections::IMap^ _pageState; }; /// /// Repräsentiert die Methode, mit der das -Ereignis behandelt wird /// public delegate void SaveStateEventHandler(Platform::Object^ sender, SaveStateEventArgs^ e); /// /// NavigationHelper bietet Unterstützung bei der Navigation zwischen Seiten. Es werden Befehle zum /// rückwärts und vorwärts navigieren sowie Register für Standardmaus und -tastatur /// Verknüpfungen, um in Windows nach vorne oder zurück zu wechseln sowie Hardwaretaste im /// Windows Phone. Darüber hinaus wird SuspensionManger zur Verwaltung der Prozesslebensdauer /// und der Zustandsverwaltung beim Navigieren zwischen Seiten integriert. /// /// /// Zur Verwendung von NavigationHelper diesen Schritten folgen, oder /// Starten Sie mit der Elementvorlage "Standardseite" oder einer beliebigen anderen Elementvorlage vom Typ "Seite" außer "Leere Seite". /// /// 1) Eine Instanz von NavigationHelper erstellen an einem Ort wie /// Konstruktor für die Seite und Registrierung eines Rückrufs für LoadState und /// SaveState-Ereignisse. /// /// MyPage::MyPage() /// { /// InitializeComponent(); /// auto navigationHelper = ref new Common::NavigationHelper(this); /// navigationHelper->LoadState += ref new Common::LoadStateEventHandler(this, &MyPage::LoadState); /// navigationHelper->SaveState += ref new Common::SaveStateEventHandler(this, &MyPage::SaveState); /// } /// /// void MyPage::LoadState(Object^ sender, Common::LoadStateEventArgs^ e) /// { } /// void MyPage::SaveState(Object^ sender, Common::SaveStateEventArgs^ e) /// { } /// /// /// 2) Die Seite für den Aufruf an NavigationHelper registrieren, wenn die Seite /// bei der Navigation, indem überschrieben wird /// und -Ereignisse. /// /// void MyPage::OnNavigatedTo(NavigationEventArgs^ e) /// { /// NavigationHelper->OnNavigatedTo(e); /// } /// /// void MyPage::OnNavigatedFrom(NavigationEventArgs^ e) /// { /// NavigationHelper->OnNavigatedFrom(e); /// } /// /// [Windows::Foundation::Metadata::WebHostHidden] [Windows::UI::Xaml::Data::Bindable] public ref class NavigationHelper sealed { public: /// /// zum Binden der Command-Eigenschaft der Schaltfläche "Zurück" /// zum Navigieren zum neuesten Element im Rückwärtsnavigationsverlauf, wenn ein Frame /// verwaltet einen eigenen Navigationsverlauf. /// /// ist für die Verwendung der virtuellen Methode eingerichtet /// als Ausführungsaktion und für CanExecute. /// property RelayCommand^ GoBackCommand { RelayCommand^ get(); } /// /// zum Navigieren zum letzten Element im /// der Vorwärtsnavigationsverlauf, wenn ein Frame seinen eigenen Navigationsverlauf verwaltet. /// /// ist für die Verwendung der virtuellen Methode eingerichtet /// als Ausführungsaktion und für CanExecute. /// property RelayCommand^ GoForwardCommand { RelayCommand^ get(); } internal: NavigationHelper(Windows::UI::Xaml::Controls::Page^ page, RelayCommand^ goBack = nullptr, RelayCommand^ goForward = nullptr); bool CanGoBack(); void GoBack(); bool CanGoForward(); void GoForward(); void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e); void OnNavigatedFrom(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e); event LoadStateEventHandler^ LoadState; event SaveStateEventHandler^ SaveState; private: Platform::WeakReference _page; RelayCommand^ _goBackCommand; RelayCommand^ _goForwardCommand; #if WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP Windows::Foundation::EventRegistrationToken _backPressedEventToken; void HardwareButton_BackPressed(Platform::Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ e); #else bool _navigationShortcutsRegistered; Windows::Foundation::EventRegistrationToken _acceleratorKeyEventToken; Windows::Foundation::EventRegistrationToken _pointerPressedEventToken; void CoreDispatcher_AcceleratorKeyActivated(Windows::UI::Core::CoreDispatcher^ sender, Windows::UI::Core::AcceleratorKeyEventArgs^ e); void CoreWindow_PointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ e); #endif Platform::String^ _pageKey; Windows::Foundation::EventRegistrationToken _loadedEventToken; Windows::Foundation::EventRegistrationToken _unloadedEventToken; void OnLoaded(Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void OnUnloaded(Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); ~NavigationHelper(); }; } }