質問

設定に応じて、Windows Phone 7アプリケーションスタイルを切り替える方法を開発しようとしています。スタイルは次のように見えます:

  • コアスタイルは、wp7style_dark.xamlおよびwp7style_light.xamlで分離および定義されています
  • 残りのスタイルは、styles.xamlで宣言されています

次のコードを使用して、app.xaml.csでテーマを接続します。

var dictionaries = Resources.MergedDictionaries;
dictionaries.Clear();
string source = String.Format("/CommonUI;component/Resources/{0}.xaml", value == AppStyleSet.Light ? "WP7Style_Light" : "WP7Style_Dark");
//base styles
var themeStyles = new ResourceDictionary {Source = new Uri(source, UriKind.Relative)};
dictionaries.Add(themeStyles);
var generalStyles = new ResourceDictionary();
generalStyles.Source = new Uri("/CommonUI;component/Resources/Styles.xaml",UriKind.Relative);
dictionaries.Add(generalStyles);

実行するとき、generalStyles.sourceの設定は例外をスローします(これは「不特定のエラー」を記載するsystem.exceptionです)。 Styles.xamlを空にした場合、例外がなくなることを発見しましたが、もちろんこれは解決策ではありません。

私は何をすべきか?

更新2: スタックトレースをねじ込み、ここに絞り込まれた問題があります。

テーマスタイルはテーマの色を定義します。一般的なスタイルは、このようなバインディングに会うまではうまく読み続けます

... <Setter Property="Color" Value="{StaticResource HighlightColor}" />

したがって、stateCresourceは解決できず、例外をスローします。これはどういうわけか避けることができますか?

役に立ちましたか?

解決

このアプローチで私が見つけた問題は、リソース辞書がどのようにURLからロードされるかについて、何らかの非同期性があるように見えることです。 Source 財産。したがって、1つの辞書が使用する場合 {StaticResource key} どこ key 以前の辞書では、失敗する可能性があります。

解決策の1つは、XAMLを使用してXAMLを抽出することです Application.GetResourceStreamStreamReader. 。その後、使用します XamlReader を構築する ResourceDictionary. 。そうすれば、従属辞書が必要な静的リソースを見つけることができることを確認できます。

注意する必要があることに注意してください。各辞書を追加する必要があります。 Application.Resources 追加の従属辞書をロードする前のツリー。

他のヒント

WP7はSilverlight 3+に基づいており、デフォルトではコードに新しいリソース辞書を作成することはできません。 System.Exception 「不特定」を述べる。

回避策、Simple Light3を使用しているかのようにリソースを簡単に作成します - このチュートリアルに従ってください.

これが問題を解決することを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top