2016-01-01 6 views
6

Ich konnte Thema wechseln mit this.RequestedTheme = ElementTheme.Dark; Aber was ich brauche, ist die gesamte Anwendungsebene, da diese nur das Thema der aktuellen Seite zu dunkel ändern.Ändern von Thema in Windows 10 UWP App programmgesteuert

Jedes Mal, wenn ich versuche, diese App.Current.RequestedTheme = ApplicationTheme.Dark; habe ich immer diesen Fehler

Eine Ausnahme vom Typ ‚System.NotSupportedException‘ aufgetreten in UWPApp.exe wurde aber in Benutzercode nicht behandelt

Gibt es so dass ich das gesamte Anwendungsthema von Hell zu Dunkel oder umgekehrt ändern kann?

Ich verwende VS2015

+0

Die Template10 Templates haben dies eingebaut. Sie können sie verwenden oder eine Lösung daraus erhalten. –

Antwort

8

aktualisiert Antwort mit dem, was ich schließlich beschlossen.

Ich habe eine Einstellungsklasse verwendet, die alle Einstellungen der Apps enthält, einschließlich des zu verwendenden Themas. Da das Thema nur beim Start festgelegt werden kann, müssen wir sicherstellen, dass es festgelegt wird. Dies ist der Code, den ich verwenden:

In der App.xaml.cs Datei:

public App() 
{ 
    //Load settings 
    AppSettings.LoadSettings(); 
    this.RequestedTheme = AppSettings.SelectedTheme; 

    this.InitializeComponent(); 
} 

In der Datei App.xaml diese Eigenschaft auf entfernen sicher:

RequestedTheme="Light" 

Wenn es ist nicht entfernt es immer standardmäßig zu beleuchten ohne Möglichkeit, es zu ändern.

Auf diese Weise kann der Benutzer das Thema wählen, es wird gespeichert und verwendet, wenn die App startet. Stellen Sie sicher, dass Sie es laden und in der App-Initialisierungsphase anwenden.

+0

Hallo ich schätze Ihren Vorschlag, ich könnte Ihren Vorschlag überprüfen, um eine flexiblere Themen zu machen, anstatt nur Standard-Dark und Light-Theme von Microsoft zur Verfügung gestellt. Aber ich würde es mehr schätzen, wenn Sie direkten Link zu einem Tutorial oder irgendwie Website, wo ich mehr darüber erfahren kann, bereitstellen können. Danke vielmals! – Darcy

+0

Muss die App neu gestartet werden, damit das Design wirksam wird? –

+0

Ja, damit es sofort passiert, müssen Sie ein Design in der App erstellen und dann auf jedes Element in der App anwenden. – Threezool

7

Das RequestedTheme der Anwendung kann nur im Konstruktor aktualisiert werden. Wie Sie jedoch herausgefunden haben, kann das RequestedTheme von Page jederzeit in der Laufzeit aktualisiert werden.

Das ist wirklich ärgerlich ist, ich weiß, und es gibt nicht viele Informationen über diese andere Situation als diese MSDN-Seite:

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.application.requestedtheme?f=255&MSPPError=-2147217396

Das Thema kann nur eingestellt werden, wenn die Anwendung gestartet wird, nicht während es Laufen. Wenn versucht wird, RequestedTheme festzulegen, während die Anwendung ausgeführt wird, wird eine Ausnahme ausgelöst (NotSupportedException für Microsoft .NET-Code). Wenn Sie dem Benutzer die Möglichkeit geben, ein Thema auszuwählen, das Teil der Benutzeroberfläche der App ist, müssen Sie die Einstellung in den App-Daten speichern und beim Neustart der App anwenden.

sollte es Abhilfen sein, aber sie allerdings ...

tun dies dumb.Microsoft in ihren eigenen offiziellen Apps wie Groove sehr werde

Meine Lösung Thema Aktualisierung auf der Element-Ebene tut, nicht die Anwendung Niveau.

  1. Erstellen Sie Ihre eigene Basepage (geerbt von Seite)
  2. Halten Sie Ihre Einstellungen unter einer statischen Klasse und ein Event für keep erstellen, um die Modelländerungen zu verfolgen.
  3. Hören Sie in Ihrem BasePage-Konstruktor dieses Ereignis und wenden Sie Änderungen an, wenn vorhanden.

Ich bin nicht in der Lage, Codebeispiel jetzt zur Verfügung zu stellen (da ich heute sehr beschäftigt bin), aber das ist bei weitem der effizienteste Weg IMHO.

+0

Hallo vielen Dank für Ihre Antwort, jetzt, was ich tue, ist, dass neues Thema gespeichert wird, aber die Anwendung muss neu gestartet werden, um wirksam zu werden. – Darcy