Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Lesedauer 2 Min.

WPF/VB: Windows-Dark-Theme erkennen

Will der Anwender statt im üblichen Lightmode mit weißen Hintergründen lieber im Darkmode arbeiten, sollte eine App darauf reagieren können.
Aber wie erkennt eine App, ob der Anwender in seinem Windows-System den dunklen Modus eingestellt hat? Die Antwort: Ganz einfach, es steht in der Registry und die kann man ja auslesen. Wie das klappt hat David Rickard in diesem Blogbeitrag für C# ausgearbeitet. Er berücksichtigt dabei auch den Hohen-Kontrast-Modus und hat eine Routine verfasst, so dass ein Programm den Wechsel des Modus permanent überwachen kann. Hier finden Sie die Kernroutine GetWindowsTheme(), welche das in der Registry gespeicherte Thema (Light/Dark) ermittelt in Form von Visual-Basic-Code (getestet unter Windows 10).
...
Const RegistryKeyPath = "Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"
Const RegistryValueName = "AppsUseLightTheme"

Private Enum WindowsTheme
  Light
  Dark
End Enum 

Private Shared Function GetWindowsTheme() As WindowsTheme
  Using key As Microsoft.Win32.RegistryKey =
    Microsoft.Win32.Registry.CurrentUser.OpenSubKey(RegistryKeyPath)
    Dim registryValueObject As Object = key?.GetValue(RegistryValueName)
    If registryValueObject Is Nothing Then
      Return WindowsTheme.Light
    End If
    Dim registryValue As Integer = CInt(registryValueObject)
    Return If(registryValue > 0, WindowsTheme.Light, WindowsTheme.Dark)
  End Using
End Function 
... 
Mehr zur hier genutzten Klasse RegistryKey finden Sie hier. Die Funktion liefert entweder WindowsTheme.Light oder WindowsTheme.Dark zurück. Hier noch ein Beispiel, wie das Programm darauf reagieren könnte (tb ist dabei eine das Fenster ausfüllende WPF-Textbox):
Private Sub MainWindow_Loaded(...) Handles Me.Loaded
  Dim theme As String = GetWindowsTheme().ToString
  If theme = "Dark" Then
    tb.Background = Brushes.Black
    tb.Foreground = Brushes.NavajoWhite
    tb.FontSize = 32
    tb.FontWeight = FontWeights.UltraBold
    tb.Text = " D a r k m o d e !! "
  End If
End Sub 
Miscellaneous

Neueste Beiträge

Tests gezielt verteilen - Schnellere .NET-CI-Pipelines mit Test Sharding, Teil 1
Lange Testsuiten verzögern das Feedback im Pull Request. Meziantou.ShardedTest verteilt die Testfälle auf mehrere CI-Jobs und verspricht dadurch mehr Geschwindigkeit. Dieser Einstieg zeigt, wie die Aufteilung funktioniert und welche Voraussetzungen nötig sind.
6 Minuten
Kalenderdaten mit Microsoft Graph - Connected Apps mit .NET, Teil 1
Eine .NET-App meldet Benutzer an, lädt eine Kalenderwoche und bereitet Outlook-Termine für die Anzeige auf.
6 Minuten
Warum Deine KI-Rechnung mit der Architektur wächst - Interview
KI soll Kosten senken. In der Praxis erleben viele Unternehmen beim Skalieren eine böse Überraschung, erklärte Dimitri Blatner von ITech Progress auf der Open Stage der DWX 2026. Developer World wollte von ihm wissen, wo Sprachmodelle Geld verbrennen und wie Du mit bewusster Architektur gegensteuerst.
30. Sep 2026

Das könnte Dich auch interessieren

Frühjahrsputz für .NET - Alte .NET-Versionen entfernen
Immer mehr .NET-Versionen sammeln sich auf der Festplatte an. Höchste Zeit, wieder Platz zu schaffen.
14 Minuten
Elektronische Schaltkreise im Browser simulieren - Simulation
Statt mit Steckfeld oder Lötkolben kann man auf dieser Website Schaltungen per Drag and Drop zusammenstellen und deren Verhalten testen.
2 Minuten
26. Jul 2018
UIs für Linux - Bedienoberflächen entwickeln mithilfe von C#, .NET und Avalonia
Es gibt viele UI-Frameworks für .NET, doch nur sehr wenige davon unterstützen Linux. Avalonia schafft als etabliertes Open-Source-Projekt Abhilfe.
16 Minuten
16. Jun 2025
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige