2016-01-01 10 views
6

this.RequestedTheme = ElementTheme.Dark; を使用してテーマを変更することができましたが、現在のページのテーマを暗くするため、アプリケーションレベル全体が必要です。Windows 10のテーマをプログラムで変更する

私はこのApp.Current.RequestedTheme = ApplicationTheme.Dark; を試みるたびに、私はいつもこのエラー

型「System.NotSupportedException」の例外がUWPApp.exeで発生しますが、ユーザーコードで処理されなかった

がありますアプリケーションのテーマ全体を明から暗に、またはその逆に変更することができますか?

私は私が最終的に決めたものとVS2015

+0

テンプレート10テンプレートにはこれが組み込まれています。テンプレート10を使用するか、そこからソリューションを収集することができます。 –

答えて

8

更新の答えを使用しています。

どのテーマを使用するかなど、すべてのアプリケーション設定を保持する設定クラスを使用しました。テーマは開始時にしか設定できないので、テーマを設定する必要があります。

をApp.xaml.csファイルで:これは私が使用したコードである

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

    this.InitializeComponent(); 
} 

App.xamlファイルでにこのプロパティを削除に確認してください:

RequestedTheme="Light" 

場合削除されていない場合は、常にデフォルトに変更されません。

この方法でユーザーはテーマを選択でき、アプリが起動すると保存されて使用されます。それを読み込んで、アプリの初期設定段階で適用するようにしてください。

+0

ご意見をお寄せいただきありがとうございます。マイクロソフトから提供されているデフォルトの暗くて明るいテーマを使用するのではなく、より柔軟なテーマを作成することをお勧めします。しかし、あなたがチュートリアルへの直接リンクを提供できれば、それ以上感謝します。どうもありがとう! – Darcy

+0

テーマを有効にするには、アプリを再起動する必要がありますか? –

+0

はい、即座に実行するには、アプリ内でテーマを作成し、アプリ内の各要素にテーマを適用する必要があります。 – Threezool

7

アプリケーションのRequestedThemeはコンストラクタでのみ更新できます。(発見したように)、PageのRequestedThemeは実行時にいつでも更新できます。

これは私が知っていると、このMSDNのページ以外のこのような状況についての多くの情報はありません本当に迷惑です:

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

アプリを起動したときのテーマにのみ設定することができ、ではない、それはだがランニング。アプリケーションの実行中にRequestedThemeを設定しようとすると、例外がスローされます(Microsoft .NETコードではNotSupportedException)。ユーザーにアプリのUIの一部であるテーマを選択するオプションを与える場合は、アプリデータをアプリのデータに保存し、アプリを再起動するときに適用する必要があります。

があるの回避策でなければなりませんが、彼らは非常にdumb.Microsoft ...しかし溝のような自分自身の公式のアプリでこれをやっているよ

私のソリューションは、要素レベルではなく、アプリケーション上のテーマの更新を行っている

レベル。

  • は、静的クラスの下にあなたの設定を維持し、モデルの変更を追跡キープのイベントを作成します(ページから継承)

    1. 独自のBasePageクラスを作成します。
    2. BasePageのコンストラクタで、このイベントをリッスンし、変更があったときに適用します。

    今日私は非常に忙しいので、コード例を提供することはできませんが、これははるかに効率的な方法です。

  • +0

    お返事ありがとうございます、今私がしているのは、新しいテーマが保存されますが、アプリケーションを有効にするために再起動する必要があるということです。 – Darcy

    関連する問題