Avalonia自訂標題列在Windows 7環境下的適配方案

Avalonia自訂標題列在Windows 7環境下的適配方案

詳解Avalonia應用在Windows 7系統下自訂標題列時原生標題列殘留問題的根本原因與完美解決方案,包含完整程式碼範例與版本相容性分析

最後更新 2025/7/23 下午11:45
沙漠尽头的狼
預計閱讀 2 分鐘
分類
Avalonia UI
標籤
.NET C# Avalonia UI 相容性處理 Avalonia

問題現象

在 Windows 7 系統中使用 Avalonia 實現自訂標題欄時,可能會遇到原生標題欄無法隱藏的相容性問題,導致介面顯示異常:

圖1:Win7環境下標題欄異常顯示效果

圖 1:Win7 環境下標題欄異常顯示效果

技術分析

這裡感謝微信 【Avalonia 開發交流群】 群友的助力:

圖2:微信群技術交流

圖 2:微信群技術交流

Avalonia 框架在不同 Windows 版本中對視窗裝飾的處理機制存在差異:

  1. Windows 10/11:預設支援現代視窗樣式,自訂標題欄可正常隱藏原生標題欄
  2. Windows 7:由於系統 compositor 限制,需要明確停用系統裝飾

SystemDecorations屬性控制視窗邊框和標題欄的顯示行為,其列舉值包括:

  • Full:完整系統裝飾(預設值)
  • BorderOnly:僅顯示邊框
  • None:完全停用系統裝飾
  • ResizeBorder:僅保留可調整大小的邊框

解決方案

透過在視窗初始化程式碼中明確設定SystemDecorations屬性為None,可強制隱藏原生標題欄:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        // 關鍵設定:停用系統裝飾以支援自訂標題欄
        // 在 Windows 7 環境下必須明確設定,Win10+ 可省略
        if (OperatingSystem.IsWindows() && !OperatingSystem.IsWindowsVersionAtLeast(6, 2)) // Windows 7 及以下
        {
            SystemDecorations = SystemDecorations.None;
        }
    }
}

設定後效果如下,原生標題欄已成功隱藏,自訂標題欄正常顯示:

圖3:套用修復後的標題欄顯示效果

圖 3:套用修復後的標題欄顯示效果

對了,要支援 Win7 AOT 執行,別忘了新增 NuGet 套件:

<PackageReference Include="YY-Thunks" Version="1.1.8-Beta4" />
繼續探索

延伸閱讀

更多文章