88 lines
4.3 KiB
C++
88 lines
4.3 KiB
C++
//*********************************************************
|
|
//
|
|
// Copyright (c) Microsoft. All rights reserved.
|
|
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
|
|
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
|
|
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
|
|
//
|
|
//*********************************************************
|
|
|
|
#pragma once
|
|
|
|
#include <collection.h>
|
|
|
|
namespace SDKSample
|
|
{
|
|
namespace Common
|
|
{
|
|
/// <summary>
|
|
/// Typical implementation of Page that provides several important conveniences:
|
|
/// <list type="bullet">
|
|
/// <item>
|
|
/// <description>Application view state to visual state mapping</description>
|
|
/// </item>
|
|
/// <item>
|
|
/// <description>GoBack, GoForward, and GoHome event handlers</description>
|
|
/// </item>
|
|
/// <item>
|
|
/// <description>Mouse and keyboard shortcuts for navigation</description>
|
|
/// </item>
|
|
/// <item>
|
|
/// <description>State management for navigation and process lifetime management</description>
|
|
/// </item>
|
|
/// <item>
|
|
/// <description>A default view model</description>
|
|
/// </item>
|
|
/// </list>
|
|
/// </summary>
|
|
[Windows::Foundation::Metadata::WebHostHidden]
|
|
public ref class LayoutAwarePage : Windows::UI::Xaml::Controls::Page
|
|
{
|
|
internal:
|
|
LayoutAwarePage();
|
|
|
|
public:
|
|
void StartLayoutUpdates(Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
|
|
void StopLayoutUpdates(Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
|
|
void InvalidateVisualState();
|
|
static property Windows::UI::Xaml::DependencyProperty^ DefaultViewModelProperty
|
|
{
|
|
Windows::UI::Xaml::DependencyProperty^ get();
|
|
};
|
|
property Windows::Foundation::Collections::IObservableMap<Platform::String^, Platform::Object^>^ DefaultViewModel
|
|
{
|
|
Windows::Foundation::Collections::IObservableMap<Platform::String^, Platform::Object^>^ get();
|
|
void set(Windows::Foundation::Collections::IObservableMap<Platform::String^, Platform::Object^>^ value);
|
|
}
|
|
|
|
protected:
|
|
virtual void GoHome(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
|
|
virtual void GoBack(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
|
|
virtual void GoForward(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
|
|
virtual Platform::String^ DetermineVisualState(Windows::UI::ViewManagement::ApplicationViewState viewState);
|
|
virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
|
|
virtual void OnNavigatedFrom(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
|
|
virtual void LoadState(Platform::Object^ navigationParameter,
|
|
Windows::Foundation::Collections::IMap<Platform::String^, Platform::Object^>^ pageState);
|
|
virtual void SaveState(Windows::Foundation::Collections::IMap<Platform::String^, Platform::Object^>^ pageState);
|
|
|
|
private:
|
|
Platform::String^ _pageKey;
|
|
bool _navigationShortcutsRegistered;
|
|
Platform::Collections::Map<Platform::String^, Platform::Object^>^ _defaultViewModel;
|
|
Windows::Foundation::EventRegistrationToken _windowSizeEventToken,
|
|
_acceleratorKeyEventToken, _pointerPressedEventToken;
|
|
Platform::Collections::Vector<Windows::UI::Xaml::Controls::Control^>^ _layoutAwareControls;
|
|
void WindowSizeChanged(Platform::Object^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ e);
|
|
void OnLoaded(Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
|
|
void OnUnloaded(Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
|
|
|
|
void CoreDispatcher_AcceleratorKeyActivated(Windows::UI::Core::CoreDispatcher^ sender,
|
|
Windows::UI::Core::AcceleratorKeyEventArgs^ args);
|
|
void CoreWindow_PointerPressed(Windows::UI::Core::CoreWindow^ sender,
|
|
Windows::UI::Core::PointerEventArgs^ args);
|
|
LayoutAwarePage^ _this; // Strong reference to self, cleaned up in OnUnload
|
|
};
|
|
}
|
|
}
|