2016-08-03 37 views
2

Ich verwende Windows.UI.ViewManagement.UISettings, um Systemakzentfarbe zu bekommen, aber es scheint, dass diese Klasse keine Methode oder Eigenschaft für den Hell/Dunkel-Modus hat. Ich habe kein Dokument für dieses Feature gefunden. Wie kann ich dies erkennen?Wie kann ich den Hell/Dunkel-Modus von Windows 10 erkennen?

PS: Ich mache eine JS-App, die keinen Zugriff auf Windows.UI.Xaml Namespace hat.

Antwort

2

ich eine einfachere Lösung gefunden zu haben, welche Anwendungen als auch in JavaScript funktionieren soll, ohne dass die Windows-Runtime-Komponenten zu erfordern - die UISettings class:

var uiSettings = new Windows.UI.ViewManagement.UISettings(); 
var color = uiSettings.getColorValue(
         Windows.UI.ViewManagement.UIColorType.background 
         ); 

Die Farbe, die Sie erhalten, ist entweder schwarz für dunkel Thema oder weiß für Licht Thema.

Die Klasse hat auch sehr nützlich Ereignis ColorValuesChanged, die Sie zu observe theme changes at runtime verwenden können.

0

ThemeResources wurden in 8.1 eingeführt und ihr Verhalten ist in W10 ähnlich. Daher können Sie geeignete Ressource in Theme Dictionaries verantwortlich für die verfügbaren Themes definieren und dann können Sie die definierte Ressource überprüfen, wenn Sie wissen möchten, welches Theme derzeit verwendet wird. Der Code wird dem in this answer sehr ähnlich sein.

+1

Es scheint die Lösung ist nur für XAML-Anwendungen. Keine Lösung für HTML-Apps? –

+0

@KagamiSaschaRosylight Ich habe nicht viel mit HTML gespielt, aber vielleicht kannst du etwas Ähnliches machen. – Romasz

3

Vor dem Windows Anniversary Update konnten Sie das nicht tun. Die Anwendung Thema war immer diejenige, die Sie in der App.xaml-Datei festgelegt:

<Application 
    ... 
    RequestedTheme="Dark"> 
</Application> 

Jetzt mit dem neuen Anniversary aktualisieren, können Sie diese Zeile aus der Datei App.xaml entfernen, die die App des Benutzers Systemeinstellungen vornehmen zu ehren.

Die RequestedTheme Enumeration hat eigentlich drei Werte - Dark, Light und Default. Default ist der Wert, der die Systemeinstellungen widerspiegelt, Dark und Light zwingen das Thema.

Wenn Sie möchten, um tatsächlich das aktuelle Thema in Code erkennen, wenn App des RequestedThemeDefault ist, werden Sie wahrscheinlich benötigen, die etwas Farbe Ressource wie SystemAltHighColor für seinen Wert zu überprüfen, denn das Ihnen eine Vorstellung davon geben wird, was Thema ist zur Zeit eingestellt .

+1

Ich brauche eine Lösung, die auch für HTML funktioniert, aber diese scheint leider nur auf XAML-Apps zu funktionieren. –

7

Sie können ein Windows Runtime Component-Projekt in Ihrer Lösung erstellen, von dort aus greifen Sie auf den Namespace Windows.UI.Xaml zu. Fügen Sie eine Methode hinzu, um das aktuelle ApplicationTheme so zu prüfen.

public sealed class Test 
{ 
    public static string CurrentTheme() 
    { 
     var isDark = Application.Current.RequestedTheme == ApplicationTheme.Dark; 

     if (isDark) 
      return "Dark"; 

     return "Light"; 
    } 
} 

In Bezug auf Windows-Runtime-Komponente Projekt in Ihrem Javascript-App-Projekt und Sie können diese Methode aufrufen, wo immer Sie Anwendung Thema überprüfen möchten. Werfen Sie einen Blick auf here für eine exemplarischen Vorgehensweise beim Erstellen der Windows-Laufzeitkomponente.