single.php

C# WinUI3のシステムメニューをダークカラーにする方法

C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトでタイトルバーを右クリックした際に表示されるシステムメニューの配色をダークモードにする方法です。

タイトルバーは未対応

WinUI3を指定して作成したプロジェクトのウィンドウのクライアント領域はWindowsの[個人用設定|色]に対応しているので、実行するとダークモードやアクセントカラーに対応してくれます。

しかしタイトルバーを含むシステムメニュー(タイトルバーを右クリックして表示されるメニュー)は対応してくれていません。

なので、実行するとこんな感じでダークモードでもライトモードでも、同じシステムメニューが表示されます。

[ExtendsContentIntoTitleBar]でタイトルバーをダークモードに対応させてもシステムメニューの配色は変わりません。

このくらいプロジェクト側で対応してくれても良さそうなんですが、Visual Studioもシステムメニューは、ダークモードの影響を受けない仕様なんですよね。

アプリ的には統一感を持たせたいのでダークカラーのシステムメニューに変更示します。

具体的には、こんな感じでメニューの配色を変更できます。

[DllImport("uxtheme.dll", EntryPoint = "#135", CharSet = CharSet.Unicode)]
public static extern int SetPreferredAppMode(int preferredAppMode);

[DllImport("uxtheme.dll", EntryPoint = "#136" CharSet = CharSet.Unicode)]
public static extern void FlushMenuThemes();

public enum PreferredAppMode : int
{
  APPMODE_DEFAULT = 0,
  APPMODE_ALLOWDARK = 1,
  APPMODE_FORCEDARK = 2,
  APPMODE_FORCELIGHT = 3,
  APPMODE_MAX = 4
};

public CustomTitleBar()
{
  this.InitializeComponent();
  ExtendsContentIntoTitleBar = true;
  SetPreferredAppMode((int)PreferredAppMode.APPMODE_FORCEDARK);
}

実行すると、ダークモードの配色でシステムメニューが表示されます。

まとめ

今回は短い記事ですが、WinUI3プロジェクトでタイトルバーを右クリックした際に表示されるシステムメニューの配色をダークモードにする方法について紹介しました。

プロジェクトを作成する際に、対応してくれても良さそうな部分ですが[Visual Studio]のタイトルバーも同じ仕様なので、何か別の要因があるのかもしれません。

Win32 APIに頼ることになりますが[SetPreferredAppMode]でダークモードの配色でシステムメニューが表示されます。

WinUI 3でダークモードの配色でシステムメニューを表示したい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です