知識マップ: Windowsアプリのダークモードとコントラストテーマ対応 ── DWMのダークタイトルバー、WinForms/WPFのシステムテーマ追従、ハイコントラスト時の描画
記事「Windowsアプリのダークモードとコントラストテーマ対応 ── DWMのダークタイトルバー、WinForms/WPFのシステムテーマ追従、ハイコントラスト時の描画」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windowsのテーマは「設定 > 個人用設定 > 色」のライト/ダーク(カラーモード)と「設定 > アクセシビリティ > コントラストテーマ」の2軸で、コントラストテーマが有効な間はダークモードが使えないため判定はコントラストテーマが先です。既存アプリのタイトルバーが白いままなのは互換性のための既定で、DwmSetWindowAttributeのDWMWA_USE_IMMERSIVE_DARK_MODE(値20)にTRUEを渡すとシステムがダークのときにダークで描かれます。現在のモードはUISettingsの前景色の明るさで判定し、変更通知で塗り直します。WinFormsは.NET 9/10のSetColorMode、WPFは.NET 9/10のThemeModeが実装を担い、コントラストテーマ時はSPI_GETHIGHCONTRAST系で判定して色をシステムカラーのペアに写像します。標準サポートの無いランタイムではライト固定を明示しますが、コントラストテーマ対応だけは固定できません。
flowchart LR
accTitle: Windowsアプリのダークモードとコントラストテーマ対応の知識マップ
accDescr: ライト/ダークのカラーモードとコントラストテーマの関係、DwmSetWindowAttributeによるダークタイトルバー、UISettingsによる検知とテーマ変更の通知、WinFormsのSetColorModeとWPFのThemeModeによる実装、コントラストテーマの検知APIとシステムカラーの前景/背景ペア、ライト固定の方針を示す図
windows_color_mode["カラーモード(ライト/ダーク)"]
contrast_theme["コントラストテーマ(ハイコントラスト)"]
dwmwa_use_immersive_dark_mode["DWMWA_USE_IMMERSIVE_DARK_MODE"]
dark_title_bar["ダークタイトルバー"]
dwm_set_window_attribute["DwmSetWindowAttribute"]
windows_11["Windows 11"]
dwm_caption_color_attributes["DWMのタイトルバー色属性"]
dwm_system_backdrop["DWMのシステム背景素材(Mica/Acrylic)"]
uisettings_color_values["UISettingsによるカラーモードの取得と変更通知"]
apps_use_light_theme_registry["AppsUseLightThemeレジストリ値"]
theme_change_notification["テーマ変更の通知"]
app_color_palette["アプリのカラーパレットの集約"]
hardcoded_color["色のハードコード"]
system_color_pairing["システムカラーの前景/背景ペア"]
high_contrast_detection["コントラストテーマの検知API"]
winforms_set_color_mode["WinFormsのApplication.SetColorMode"]
winforms_apply_theming_implicitly["ControlStyles.ApplyThemingImplicitly"]
owner_drawn_control["独自描画コントロール"]
wpf_theme_mode["WPFのThemeMode(Fluentテーマ)"]
wpf_resource_dictionary_swap["WPFのリソース辞書の差し替え"]
wpf["WPF"]
winui_theme_dictionaries["WinUIのThemeDictionaries"]
contrast_theme_support["コントラストテーマ対応"]
contrast_ratio["コントラスト比(達成基準1.4.3)"]
light_fixed_policy["ライト固定の方針"]
dotnet_framework[".NET Framework"]
contrast_theme -->|"両立しない"| windows_color_mode
dwmwa_use_immersive_dark_mode -->|"実装を担う"| dark_title_bar
dark_title_bar -->|"で構成できる"| dwm_set_window_attribute
dark_title_bar -->|"前提とする"| windows_color_mode
dwmwa_use_immersive_dark_mode -->|"前提とする"| windows_11
dwm_caption_color_attributes -->|"で構成できる"| dwm_set_window_attribute
dwm_system_backdrop -->|"で構成できる"| dwm_set_window_attribute
dwm_system_backdrop -->|"前提とする"| windows_11
windows_color_mode -->|"で確認できる"| uisettings_color_values
windows_color_mode -->|"に保存される"| apps_use_light_theme_registry
theme_change_notification -->|"推奨される対応"| windows_color_mode
theme_change_notification -->|"推奨される対応"| contrast_theme
app_color_palette -->|"推奨される対応"| windows_color_mode
hardcoded_color -->|"用いるのは非推奨"| contrast_theme
hardcoded_color -->|"両立しない"| system_color_pairing
system_color_pairing -->|"推奨される対応"| contrast_theme
contrast_theme -->|"で確認できる"| high_contrast_detection
winforms_set_color_mode -->|"実装を担う"| windows_color_mode
winforms_set_color_mode -->|"前提とする"| windows_11
winforms_set_color_mode -->|"両立しない"| contrast_theme
winforms_apply_theming_implicitly -.->|"推奨される対応"| owner_drawn_control
wpf_theme_mode -->|"実装を担う"| windows_color_mode
wpf_theme_mode -->|"実装を担う"| dark_title_bar
wpf_resource_dictionary_swap -.->|"推奨される対応"| wpf
winui_theme_dictionaries -->|"実装を担う"| contrast_theme_support
windows_color_mode -->|"前提とする"| contrast_ratio
light_fixed_policy -.->|"推奨される対応"| dotnet_framework
contrast_theme_support -->|"推奨される対応"| light_fixed_policy
概念間の関係(全28件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- コントラストテーマ(ハイコントラスト)はカラーモード(ライト/ダーク)と両立しません。
- DWMWA_USE_IMMERSIVE_DARK_MODEはダークタイトルバーの実装を担います。
- ダークタイトルバーはDwmSetWindowAttributeで構成できます。
- ダークタイトルバーはカラーモード(ライト/ダーク)を前提とします。
- DWMWA_USE_IMMERSIVE_DARK_MODEはWindows 11を前提とします。
- DWMのタイトルバー色属性はDwmSetWindowAttributeで構成できます。
- DWMのシステム背景素材(Mica/Acrylic)はDwmSetWindowAttributeで構成できます。
- DWMのシステム背景素材(Mica/Acrylic)はWindows 11を前提とします。
- カラーモード(ライト/ダーク)はUISettingsによるカラーモードの取得と変更通知で確認できます。
- カラーモード(ライト/ダーク)はAppsUseLightThemeレジストリ値に保存されます。
- テーマ変更の通知はカラーモード(ライト/ダーク)に対する本記事の推奨です。
- テーマ変更の通知はコントラストテーマ(ハイコントラスト)に対する本記事の推奨です。
- アプリのカラーパレットの集約はカラーモード(ライト/ダーク)に対する本記事の推奨です。
- 色のハードコードをコントラストテーマ(ハイコントラスト)に用いることは推奨されません。
- 色のハードコードはシステムカラーの前景/背景ペアと両立しません。
- システムカラーの前景/背景ペアはコントラストテーマ(ハイコントラスト)に対する本記事の推奨です。
- コントラストテーマ(ハイコントラスト)はコントラストテーマの検知APIで確認できます。
- WinFormsのApplication.SetColorModeはカラーモード(ライト/ダーク)の実装を担います。
- WinFormsのApplication.SetColorModeはWindows 11を前提とします。
- WinFormsのApplication.SetColorModeはコントラストテーマ(ハイコントラスト)と両立しません。
- ControlStyles.ApplyThemingImplicitlyは独自描画コントロールに対する本記事の推奨です。
- WPFのThemeMode(Fluentテーマ)はカラーモード(ライト/ダーク)の実装を担います。
- WPFのThemeMode(Fluentテーマ)はダークタイトルバーの実装を担います。
- WPFのリソース辞書の差し替えはWPFに対する本記事の推奨です。
- WinUIのThemeDictionariesはコントラストテーマ対応の実装を担います。
- カラーモード(ライト/ダーク)はコントラスト比(達成基準1.4.3)を前提とします。
- ライト固定の方針は.NET Frameworkに対する本記事の推奨です。
- コントラストテーマ対応はライト固定の方針に対する本記事の推奨です。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。