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

圖 1:Win7 環境下標題欄異常顯示效果
技術分析
這裡感謝微信 【Avalonia 開發交流群】 群友的助力:

圖 2:微信群技術交流
Avalonia 框架在不同 Windows 版本中對視窗裝飾的處理機制存在差異:
- Windows 10/11:預設支援現代視窗樣式,自訂標題欄可正常隱藏原生標題欄
- 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:套用修復後的標題欄顯示效果
對了,要支援 Win7 AOT 執行,別忘了新增 NuGet 套件:
<PackageReference Include="YY-Thunks" Version="1.1.8-Beta4" />