2017-06-07 9 views
0

私は、アプリ全体を通していくつかのコアカラーをユーザーがオンザフライで変更できるようにしようとしています。私の現在のアイデアは、私の "テーマカラー"である単一のSolidColorBrushを持って、それを私のメインスタイルを通して参照することです。App.xamlのリソースディクショナリにオンザフライで格納されているコードを使用してスタイルを変更するにはどうすればよいですか?

<SolidColorBrush x:Key="ReflectiveColor1" Color="#FF0E777B"></SolidColorBrush> 

このコードは、私が試してみて、私のApp.csの色にアクセスすると、私はエラー

Application.Current.Resources["ReflectiveColor1"] = Colors.Black; 
を取得し、私のApp.xaml

<Application.Resources> 
    <ResourceDictionary Source="DictionaryAlienwareTheme.xaml"> 
    </ResourceDictionary> 
</Application.Resources> 

で参照されるのResourceDictionaryに格納されます

エラー:

System.Runtime.InteropServices.COMException: 'No installed components were 
detected. 
Local values are not allowed in resource dictionary with Source set 

この作業を行うにはどうすればよいですか?私はそこに格納されているスタイルを変更したくないのでこのエラーがあると仮定していますが、回避策はわかりません。

+0

色の割り当ても間違っています。以前はSolidColorBrushだったものにColorを割り当てようとしています。おそらく '((SolidColorBrush)Application.Current.Resources [" ReflectiveColor1 "])。Color = Colors.Black;' – Clemens

答えて

1

まず、App.xamlあなたが自分で定義したDictionaryAlienwareTheme.xamlを参照したい場合は、辞書を現在のアプリケーションにマージする必要があります@AVKと言います。詳細については、this articleの「マージされたリソース辞書」セクションを参照してください。

第2に、マージされたリソースを使用した後で、テーマリソースコードを更新する場合はを使用してApplication.Current.Resourcesの代わりにマージされた辞書にアクセスする必要があります。上記のコードが示されたように、例えば、ところで

public MainPage() 
{ 
    this.InitializeComponent(); 
    var mergedDict = Application.Current.Resources.MergedDictionaries.FirstOrDefault(); 
    ((SolidColorBrush)mergedDict["ReflectiveColor1"]).Color = Colors.Red; 
} 

は、ReflectiveColor1あなたが直接色を設定することができないSolidColorBrushあります。

1

すべてのリソース辞書を結合するまで、アプリケーションはリソースReflectiveColor1を見つけることができません。

App.xamlを変更して辞書をマージしてください。以下のように。

<Application.Resources> 
    <ResourceDictionary > 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="DictionaryAlienwareTheme.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

次に、以前と同じ方法でリソースにアクセスできるはずです。

+0

これは近づいても完全には機能していないようです。他のXAMLではReflectiveColor1をどのように参照しますか? BindingとThemeResourceを試しましたが、コードで選択された色に更新されていないようです。 –

関連する問題