// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. #pragma once namespace CalculatorApp { public ref class WindowFrameService sealed { public: Windows::UI::Xaml::Controls::Page ^ GetCurrentPage(); void SetNewFrame(_In_ Windows::UI::Xaml::Controls::Frame ^ frame); internal : // createdByUs means any window that we create. // !createdByUs means the main window static WindowFrameService ^ CreateNewWindowFrameService(_In_ Windows::UI::Xaml::Controls::Frame ^ viewFrame, bool createdByUs, Platform::WeakReference parent); Windows::UI::Core::CoreDispatcher ^ GetCoreDispatcher(); int GetViewId(); void RegisterOnWindowClosingHandler(std::function onWindowClosingHandler); concurrency::task HandleViewRelease(); // Throws InvalidArgumentException if a service is already registered with the specified id void RegisterRuntimeWindowService(Windows::UI::Xaml::Interop::TypeName serviceId, _In_opt_ Platform::Object ^ service); // Returns false if no service was registered with the specified id bool RemoveRuntimeWindowService(Windows::UI::Xaml::Interop::TypeName serviceId); // Throws InvalidArgumentException if no service is registered with the specified id Platform::Object ^ ResolveRuntimeWindowService(Windows::UI::Xaml::Interop::TypeName serviceId); // Returns nullptr if no service is registered with the specified id _Ret_maybenull_ Platform::Object ^ TryResolveRuntimeWindowService(Windows::UI::Xaml::Interop::TypeName serviceId); Windows::UI::Xaml::Controls::Frame ^ GetFrame(); void InvokeWindowClosingHandlers(); private: WindowFrameService(_In_ Windows::UI::Xaml::Controls::Frame ^ viewFrame, Platform::WeakReference parent); void InitializeFrameService(bool createdByUs); void OnConsolidated(_In_ Windows::UI::ViewManagement::ApplicationView ^ sender, _In_ Windows::UI::ViewManagement::ApplicationViewConsolidatedEventArgs ^ e); void OnClosed(_In_ Windows::UI::Core::CoreWindow ^ sender, _In_ Windows::UI::Core::CoreWindowEventArgs ^ args); void LogOnViewClosed(_In_ Windows::UI::Core::CoreWindow ^ coreWindow); private: Platform::Agile m_currentWindow; Platform::Agile m_coreDispatcher; Windows::UI::Xaml::Controls::Frame ^ m_frame; int m_viewId; Platform::WeakReference m_parent; std::unordered_map m_runtimeServicesMap; std::vector> m_onWindowClosingHandlers; }; }