//
// 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();
};
}
}