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 

Neueste Beiträge

Ein Jahr CODELUTION Zertifizierungssystem – ein neuer Standard in der IT-Weiterbildung - [sponsered]
Das rollenbasierte Zertifizierungssystem für Entwickler-Schulungen der Karlsruher CODELUTION GmbH hebt sich bewusst von technologiegebundenen Zertifikaten ab.
3 Minuten
25. Sep 2025
Delphi als Turbo für die mobile Entwicklung - Mobile Apps entwickeln mit Delphi, Teil 1
Delphi ermöglicht es, effizient plattformübergreifende Anwendungen zu erstellen. In diesem ersten Teil der Serie beleuchten wir die Motivation ebenso wie das Setup eines ersten Beispielprojekts.
6 Minuten
DDC hakt nach: Wie baust Du eine Softwarearchitektur ohne Schuldenfalle auf?
Moderne Softwarearchitektur muss zukunftsfähig sein – aber auch schon heute funktionieren. David Tielke über den architektonischen Spagat zwischen Cloud, KI, Schuldenmanagement und gesundem Menschenverstand.
7 Minuten
22. Sep 2025
Miscellaneous

Das könnte Dich auch interessieren

.NET Framework 4.6.2 ist da - 03.08.2016, 00:00 Uhr
Viele der Neuerungen von .NET 4.6.2 basieren auf dem über UserVoice und Connect gegebenen Feedback von Entwicklern, so beispielsweise die Abschaffung des 260-Zeichen-Limits für Pfade.
2 Minuten
.NET-Wrapper für hilfreiche Bibliotheken - Empfohlene Downloads
Es gibt Funktionen, die will man nicht selbst programmieren. Vielleicht, weil diese selten benutzt werden oder weil es dafür schon Tools gibt. Doch auch das Anbinden von solchen Tools an eigene Software kann aufwendig sein. Es sei denn, Sie finden den passenden Wrapper. Und das dürfte in vielen Fällen kein Problem sein. Denn eines hat unsere Recherche für den Schwerpunkt der Heft-Disk ergeben: Wrapper gibt es wie Sand am Meer. Deshalb: Schmökern Sie rein ...
7 Minuten
14. Aug 2017
Erstellung von ZUGFeRD 2.3 mit .NET C# - Rechnungserstellung
ZUGFeRD 2.3 konforme Rechnungen mit TX Text Control .NET Server für ASP.NET erstellen.
3 Minuten
9. Jan 2025
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige