要するに私の質問は: WP7.1 アプリで ResourceDictionaries を切り替える方法は? 私がやろうとしている方法よりも簡単な方法はありますか?
詳細...
Windows Phone 7 プロジェクトでは、ユーザーのテーマ (ライト/ダーク) に従ってアプリケーション リソースを置き換える必要があります。
a) ResourceDictionary 変数を作成する
b) 現在のテーマに従って適切なスタイルとブラシのリソース ファイルを取得するc
) 上記のリソースを Application.Current.Resources.MergedDictionaries に追加する
これが私がやっていることです:
1) 「View」プロジェクトのリソースのフォルダー構造:
Resources
Dark
Brushes.xaml
Styles.xaml
Light
Brushes.xaml
Styles.xaml
2) 2 つの Brushes.xaml ファイルのスタイルには同じキーがあります。Styles.xaml と同じです。
3) 私の最初の試み (明るいテーマが選択されていると仮定) で、2 行目に「不明なエラー」が表示されます。
var uriPath = "Resources/Light/Brushes.xaml";
var brushes = new ResourceDictionary {Source = new Uri(uriPath, UriKind.Relative)};
dic.MergedDictionaries.Add(brushes);
(参考までに、リソース、ページ、およびコンテンツのビルドアクションで試しました)
4) 2 回目の試みでは、Brushes.xaml をアプリの MergedDictionaries にうまく詰め込むことができたので、希望が持てます。
string xaml;
var uriPath = "Resources/Light/Brushes.xaml";
var brushesUri = new Uri(uriPath, UriKind.Relative);
var brushesStream = Application.GetResourceStream(brushesUri);
using (var brushesStreamReader = new StreamReader(brushesStream.Stream))
xaml = brushesStreamReader.ReadToEnd();
var dic = new ResourceDictionary();
dic.MergedDictionaries.Add((ResourceDictionary)XamlReader.Load(xaml));
5) brushesStreamReader がnull
上記のコードに含まれないようにするには、xaml ファイルを「コンテンツ」に設定する必要があります。(どうして?)
6) ステップ 4 のコードの 2 番目の問題は、Styles.xaml で同じことをしようとしたときです。最後の行に" Failed to assign to property 'System.Windows.ResourceDictionary.Source'
" が表示されます (dic.MergedDictionaries.Add...)。おそらくこれは、Styles.xaml が独自の MergedDictionaries に Brushes.xaml を追加するためです。
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Brushes.xaml"/>
</ResourceDictionary.MergedDictionaries>
それは...ですか?
ありがとう!