問題の現象
Windows 7 システムで Avalonia を使いカスタムタイトルバーを実装する際、ネイティブタイトルバーが非表示にできない互換性の問題が発生し、以下のようにインターフェースが異常表示される場合があります:

図1:Win7環境におけるタイトルバーの異常表示
技術分析
ここで、WeChat 【Avalonia 開発交流グループ】のグループメンバーのご協力に感謝します:

図2:WeChatグループ内の技術交流
Avalonia フレームワークは、Windows のバージョンによってウィンドウ装飾の処理メカニズムが異なります:
- Windows 10/11:最新のウィンドウスタイルをデフォルトでサポートし、カスタムタイトルバーでネイティブタイトルバーを正常に非表示にできます。
- Windows 7:システムのコンポジターの制限により、システム装飾を明示的に無効にする必要があります。
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" />