C# WinUI 3アプリを作っていく途中で、躓いた部分を備忘録的に投稿します。今回はレジストリからダークモードの設定を取得する手順です。
Windowsのダークモード
Windows11の場合、[個人用設定|色]画面に設定する項目があります。
タイトルバーやウィンドウなど画面が黒系を基調にした「ダーク」
通常のWindowsのカラーリングである「ライト」
2つのモードを設定画面で選ぶことができます。Google Chromeなど対応しているアプリであれば設定に合わせて画面の配色が変更されるようになります。
C#からこの「モード」設定を取得する詳しい内容に興味のある方は別記事をご覧ください。
レジストリから取得
WinUI 3プロジェクトでは、多くの制約がありますがレジストリからの取得は[Microsoft.Win32.RegistryKey]アセンブリから取得できます。
後で再利用できるように関数化しています。
private bool GetSystemUsesLightTheme()
{
bool bResult = false;
string sKeyName = @"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize";
string sSubkeyName = "SystemUsesLightTheme";
Microsoft.Win32.RegistryKey? rKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(sKeyName);
if (rKey is not null)
{
if ((int)rKey.GetValue(sSubkeyName) == 1)
{
bResult = true;
}
rKey.Close();
}
return bResult;
}
あとは取得したい場所で[GetSystemUsesLightTheme]関数を呼び出します。
WinUI3の場合、Xamlで構成される画面はWindowsの[設定|色]画面でモードが反映されますが、タイトルバーなどクライアント領域以外は対象外になってしまいます。
タイトルバーもモードに合わせて色を変更する場合には、コンストラクターなどで取得して背景色などを変更する必要があります。
まとめ
今回は、WinUI 3 アプリのWindows10/11のダークモードを取得する方法を書きました。
WinUI3プロジェクトは、制限があるアセンブリなどが多いため難しそうですが、レジストリの取得は通常通りのアセンブリで可能になっているのでレジストリを通して取得できます。
C#のWinUI 3アプリでダークモードの設定を取得したい場合の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。