2016-01-01 17 views
6

Sono stato in grado di cambiare tema utilizzando this.RequestedTheme = ElementTheme.Dark; Ma quello di cui ho bisogno è l'intero livello di applicazione, poiché questo cambia solo il tema della pagina corrente a buio.Modifica tema nell'app UWP di Windows 10 a livello di codice

Ogni volta che provo questa App.Current.RequestedTheme = ApplicationTheme.Dark; ottengo sempre questo errore

Un'eccezione di tipo 'System.NotSupportedException' si è verificato in UWPApp.exe ma non è stata gestita nel codice utente

C'è in modo tale da poter cambiare l'intero tema dell'applicazione da Light a Dark o viceversa?

sto usando VS2015

+0

I modelli Template10 hanno questo built-in. È possibile utilizzare o raccogliere una soluzione da esso. –

risposta

8

risposta Aggiornato con quello che ho finalmente deciso su.

Ho utilizzato una classe di impostazioni che contiene tutte le impostazioni dell'app tra cui quale tema utilizzare. Poiché il tema può essere impostato solo all'avvio, è necessario accertarsi di impostarlo. Questo è il codice che ho usato:

Nel file App.xaml.cs:

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

    this.InitializeComponent(); 
} 

Nel file App.xaml assicuratevi di rimuovere quest'affare:

RequestedTheme="Light" 

Se non viene rimosso, viene sempre visualizzato come predefinito, senza possibilità di modificarlo.

In questo modo l'utente può scegliere il tema, viene memorizzato e utilizzato all'avvio dell'app. Assicurati di caricarlo e applicarlo nella fase di inizializzazione dell'app.

+0

Ciao, apprezzo il tuo suggerimento, potrei controllare il tuo suggerimento per creare temi più flessibili invece di usare solo il tema scuro e chiaro predefinito fornito da Microsoft. Ma lo apprezzerei di più se puoi fornire un link diretto a un tutorial o un sito in qualche modo in cui posso saperne di più. Molte grazie! – Darcy

+0

Quindi, l'applicazione deve essere riavviata affinché il tema diventi effettivo? –

+0

Sì, perché ciò accada all'istante, dovrai creare un tema all'interno dell'app e applicarlo a ciascun elemento nell'app. – Threezool

7

L'applicazione RequestedTheme può essere aggiornata solo nel costruttore. Tuttavia (come hai scoperto), Page's RequestedTheme può essere aggiornato in qualsiasi momento in runtime.

Questo è davvero fastidioso che conosco e non c'è molto informazioni su questa situazione diversa da questa pagina MSDN:

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

Il tema può essere impostato solo quando viene avviata l'applicazione, non mentre è in esecuzione. Il tentativo di impostare RequestedTheme durante l'esecuzione dell'applicazione genera un'eccezione (NotSupportedException per codice Microsoft .NET). Se offri all'utente la possibilità di scegliere un tema che fa parte dell'interfaccia utente dell'app, devi salvare l'impostazione nei dati dell'app e applicarla al riavvio dell'app.

Non ci dovrebbero essere soluzioni alternative ma saranno molto dumb.Microsoft fare questo nelle proprie applicazioni ufficiali come Groove però ...

La mia soluzione sta facendo l'aggiornamento tema a livello di elemento, non l'applicazione livello.

  1. Crea il tuo BasePage (ereditato da pagina)
  2. mantenere le impostazioni in una classe statica e creare un evento per continuare a seguire il modello cambia.
  3. Nella funzione di costruzione di BasePage ascoltare questo evento e applicare le modifiche quando disponibili.

Non sono in grado di fornire esempi di codice in questo momento (dato che sono molto occupato oggi), ma questo è di gran lunga il modo più efficace IMHO.

+0

Ciao grazie per la tua risposta, in questo momento quello che faccio è che il nuovo tema verrà salvato ma l'applicazione deve essere riavviata per avere effetto. – Darcy

Problemi correlati