簡體   English   中英

如何以編程方式移動和最小化 Maui windows 應用程序

[英]How to move and minimize Maui windows application programmatically

我有一個帶有 blazor 的 maui 應用程序,我正在創建一個自定義標題欄。

我即將關閉 maui 應用程序,使用 blazor Application.Current.Quit();

現在我如何最小化和移動 maui 應用程序

我的代碼 blazor

private void MoveWindow()
{
    
}

private void MinimizeWindow()
{
        
}


private void CloseWindow() {
    Application.Current.Quit();
}

Maui 已經有一個 function 來最小化應用程序。

在 blazor 中使用以下內容:

private void MinimizeWindow()
{
#if WINDOWS
    var Window = App.Current.Windows.First();
    var nativeWindow = Window.Handler.PlatformView;
    IntPtr windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(nativeWindow);
    WindowId WindowId = Win32Interop.GetWindowIdFromWindow(windowHandle);
    AppWindow appWindow = AppWindow.GetFromWindowId(WindowId);

    var p = appWindow.Presenter as OverlappedPresenter;

    p.Minimize();
#endif
}

您需要為此調用本機代碼。 添加對PInvoke.User32 package 的引用:

<PackageReference Include="PInvoke.User32" Version="0.7.104" Condition="$([MSBuild]::IsOSPlatform('windows'))"/>

最小化

作為單擊按鈕的示例,我們最小化 window:

void MinimizeWindow(object sender, EventArgs e)
{
#if WINDOWS
            var mauiWindow = App.Current.Windows.First();
            var nativeWindow = mauiWindow.Handler.PlatformView;
            IntPtr windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(nativeWindow);

            PInvoke.User32.ShowWindow(windowHandle, PInvoke.User32.WindowShowStyle.SW_MINIMIZE);
#endif
}

移動

void MoveWindow(object sender, EventArgs e)
{
#if WINDOWS
            var mauiWindow = App.Current.Windows.First();
            var nativeWindow = mauiWindow.Handler.PlatformView;
            IntPtr windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(nativeWindow);
            PInvoke.RECT rect;

            PInvoke.User32.GetWindowRect(windowHandle, out rect);
            (var width, var height) = GetWinSize(rect);

            PInvoke.User32.MoveWindow(windowHandle, 50, 0, width, height, true);

#endif
}

(int width, int height) GetWinSize(PInvoke.RECT rect) =>
            (rect.right - rect.left, rect.bottom - rect.top);

可以使用MoveWindow()調整 window 的大小,但由於問題的目的是僅移動 window,因此我們提供當前窗口的寬度和高度值作為參數。

Ps:不幸的是,我沒有找到更簡單的解決方案來獲得 window 尺寸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM