Windows Phone 8.1アプリケーションには、3つの異なる色の状態を持つことができるコンポーネントがいくつかあるページがあります。赤、青、または現在のテーマの前景色のいずれかにする必要があります。Windows Phone 8.1のテーマの変更をプログラムでチェックするタイミング
したがって、電話でDarkテーマを使用してアプリを起動してから、ユーザーがアプリから離れてLightテーマを変更して再びアプリに入ると、古いテーマの前景色。
コンポーネントは異なる色(テーマの前景色がそのうちの1つ)の間で変更されるはずなので、私は前景をPhoneForegroundColor
のXAML
に設定できません。私がやった何
はこの行いResuming
イベントリスナーを追加することです:
myTextBlock.Foreground = new SolidColorBrush((Color)Application.Current.Resources["PhoneForegroundColor"]);
しかし... Resuming
イベントが更新されApplication.Currentのリソースの前に解雇されたが、私は終わりますこれまでと同じ色で。ユーザーが前回に復帰した場合は、Application.Current.Resources["PhoneForegroundColor"]
が、前回のResuming
イベントの後のある時点で更新されてから動作します。
質問:Resuming
が正しい場所ではないようですので、私は最初、更新Application.Current.Resources["PhoneForegroundColor"]
を読むことができますか?
質問:また、私は電話のテーマへの変更を気にすることなく、レッド/ブルー/継承の間でプログラム的にmyTextBlock.Foreground
を変更することができるように、別のコンポーネントのForegroundColor(CSSっぽい)を継承するmyTextBlock
ための方法があります私のアプリのライフサイクルの中で?
ご了承ください。あなたの最初の質問については
ありがとうございました!私はまた、最初の解決策を持っていますので、私はその解決策を考えています:)しかし、代わりの解決策として、 "{TextColor、Source = {StaticResource ColorBindingProvider}}"というバインドをプログラムで設定する必要があります。私はRedまたはBlueで上書きしている可能性があるので、XAMLにあったものはもうアクティブではありません... – andrrs
いいえ、単にあなたのColor設定をプロバイダの "App_Resuming"メソッドに入れることができます。これは依存関係プロパティなので、更新時にすべてのバインディングに通知します。実行時に色の設定を変更すると、何とかそれを起動する必要があります。メッセージングを使用するか、App.Current.Resources [...]を介してプロバイダを取得し、プロパティを設定します。 –
Btw:依存プロパティを使用する代わりに、BindingProviderにINotifyPropertyChangedを実装させることもできます。 –