2016-01-01 15 views
6

Udało mi się zmienić motyw za pomocą this.RequestedTheme = ElementTheme.Dark; Ale potrzebuję całego poziomu aplikacji, ponieważ ten zmienia tylko motyw aktualnej strony na ciemny.Zmiana motywu w aplikacji Windows 10 UWP Programowo

Ilekroć próbuję to App.Current.RequestedTheme = ApplicationTheme.Dark; zawsze uzyskać ten błąd

Wyjątek typu „System.NotSupportedException” wystąpił w UWPApp.exe ale nie był obsługiwany w kodzie użytkownika

Czy istnieje taki sposób, że mogę zmienić cały motyw aplikacji z Jasnego na Ciemny lub na odwrót?

Używam VS2015

+0

Szablony Template10 mają to wbudowane. Możesz z nich korzystać lub zbierać z nich rozwiązanie. –

Odpowiedz

8

Aktualizacja odpowiedź, co w końcu zdecydowaliśmy się na.

Użyłem klasy ustawień, która zawiera wszystkie ustawienia aplikacji, w tym temat do wykorzystania. Ponieważ motyw można ustawić tylko po uruchomieniu, należy go ustawić. Jest to kod użyłem:

W pliku App.xaml.cs:

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

    this.InitializeComponent(); 
} 

W pliku App.xaml upewnij się usunąć tę właściwość:

RequestedTheme="Light" 

Jeśli nie jest usuwany, zawsze domyślnie jest światłem, bez możliwości zmiany.

W ten sposób użytkownik może wybrać motyw, zostanie zapisany i użyty po uruchomieniu aplikacji. Wystarczy go załadować i zastosować w fazie inicjowania aplikacji.

+0

Cześć, dziękuję za sugestię. Mogę sprawdzić Twoją sugestię, aby stworzyć bardziej elastyczne motywy, zamiast używać domyślnego ciemnego i jasnego motywu dostarczonego przez firmę Microsoft. Ale doceniłbym to bardziej, gdybyś mógł podać bezpośredni link do samouczka lub strony, na której mogę dowiedzieć się więcej. Wielkie dzięki! – Darcy

+0

Czy aplikacja musi zostać ponownie uruchomiona, aby motyw zaczął działać? –

+0

Tak, aby nastąpiło to natychmiast, musisz utworzyć motyw wewnątrz aplikacji, a następnie zastosować go do każdego elementu w aplikacji. – Threezool

7

Aplikacja RequestedTheme może być aktualizowana tylko w constructor.However (jak odkryłeś), Strona RequestedTheme może być aktualizowana w dowolnym momencie w czasie wykonywania.

To jest naprawdę irytujące wiem i nie ma zbyt wiele informacji na temat tej sytuacji innej niż tej stronie MSDN:

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

Temat można ustawić tylko wtedy, gdy aplikacja jest uruchomiona, nie zaś to bieganie. Próba ustawienia RequestedTheme podczas działania aplikacji zgłasza wyjątek (NotSupportedException dla kodu Microsoft .NET). Jeśli dasz użytkownikowi opcję wyboru motywu będącego częścią interfejsu aplikacji, musisz zapisać to ustawienie w danych aplikacji i zastosować je po ponownym uruchomieniu aplikacji.

Nie powinno być obejścia ale będę bardzo dumb.Microsoft robi to w swoich oficjalnych aplikacji, takich jak Groove mimo ...

Moje rozwiązanie robi motyw aktualizacji na poziomie elemencie bez wniosku poziom.

  1. Stwórz własną BasePage (odziedziczone Page)
  2. Miej ustawienia w klasie statycznej i utworzyć wydarzenie na utrzymanie śledzenie zmian modelowych.
  3. W swoim konstruktorze BasePage nasłuchuj tego zdarzenia i stosuj zmiany, gdy jest.

Nie jestem w stanie podać przykładu kodu w tej chwili (ponieważ jestem dzisiaj bardzo zajęty), ale jest to zdecydowanie najbardziej efektywny sposób na IMHO.

+0

Cześć, dziękuję za odpowiedź. Teraz robię to, że nowa kompozycja zostanie zapisana, ale aplikacja musi zostać ponownie uruchomiona, aby odnieść skutek. – Darcy

Powiązane problemy