diff --git a/src/CommunityToolkit.Maui.MediaElement/CommunityToolkit.Maui.MediaElement.csproj b/src/CommunityToolkit.Maui.MediaElement/CommunityToolkit.Maui.MediaElement.csproj index 2eebfc1f8..3967c221a 100644 --- a/src/CommunityToolkit.Maui.MediaElement/CommunityToolkit.Maui.MediaElement.csproj +++ b/src/CommunityToolkit.Maui.MediaElement/CommunityToolkit.Maui.MediaElement.csproj @@ -7,6 +7,8 @@ true true true + true + 15.0 15.0 diff --git a/src/CommunityToolkit.Maui.MediaElement/Views/MauiMediaElement.windows.cs b/src/CommunityToolkit.Maui.MediaElement/Views/MauiMediaElement.windows.cs index 9a6d50ef5..c752e8402 100644 --- a/src/CommunityToolkit.Maui.MediaElement/Views/MauiMediaElement.windows.cs +++ b/src/CommunityToolkit.Maui.MediaElement/Views/MauiMediaElement.windows.cs @@ -1,4 +1,5 @@ using System.Reflection; +using System.Runtime.InteropServices; using CommunityToolkit.Maui.Extensions; using CommunityToolkit.Maui.Primitives; using CommunityToolkit.Maui.Views; @@ -8,7 +9,6 @@ using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls.Primitives; using Microsoft.UI.Xaml.Markup; -using WinRT.Interop; using Application = Microsoft.Maui.Controls.Application; using Grid = Microsoft.UI.Xaml.Controls.Grid; using Page = Microsoft.Maui.Controls.Page; @@ -20,7 +20,9 @@ namespace CommunityToolkit.Maui.Core.Views; /// public partial class MauiMediaElement : Grid, IDisposable { - static readonly AppWindow appWindow = GetAppWindowForCurrentWindow(); + [LibraryImport("user32.dll")] + internal static partial IntPtr GetForegroundWindow(); + readonly Popup popup = new(); readonly Grid fullScreenGrid = new(); readonly MediaPlayerElement mediaPlayerElement; @@ -147,24 +149,16 @@ protected virtual void Dispose(bool disposing) static AppWindow GetAppWindowForCurrentWindow() { - // let's cache the CurrentPage here, since the user can navigate or background the app - // while this method is running - var currentPage = CurrentPage; - - if (currentPage?.GetParentWindow().Handler.PlatformView is not MauiWinUIWindow window) - { - throw new InvalidOperationException($"{nameof(window)} cannot be null."); - } - - var handle = WindowNative.GetWindowHandle(window); - var id = Win32Interop.GetWindowIdFromWindow(handle); - + var windowHandle = GetForegroundWindow(); + var id = Win32Interop.GetWindowIdFromWindow(windowHandle); return AppWindow.GetFromWindowId(id); } void OnFullScreenButtonClick(object sender, RoutedEventArgs e) { var currentPage = CurrentPage; + var appWindow = GetAppWindowForCurrentWindow(); + if (appWindow.Presenter.Kind is AppWindowPresenterKind.FullScreen) { appWindow.SetPresenter(AppWindowPresenterKind.Default);