実行時にResourcedictonaryを追加する場合の例外
-
30-09-2019 - |
質問
設定に応じて、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.GetResourceStream
と StreamReader
. 。その後、使用します XamlReader
を構築する ResourceDictionary
. 。そうすれば、従属辞書が必要な静的リソースを見つけることができることを確認できます。
注意する必要があることに注意してください。各辞書を追加する必要があります。 Application.Resources
追加の従属辞書をロードする前のツリー。
他のヒント
WP7はSilverlight 3+に基づいており、デフォルトではコードに新しいリソース辞書を作成することはできません。 System.Exception
「不特定」を述べる。
回避策、Simple Light3を使用しているかのようにリソースを簡単に作成します - このチュートリアルに従ってください.
これが問題を解決することを願っています。