ユニバーサル Windows 8.1 ストア プロジェクトはこちら。
リソース名を指定して、アプリケーションのマージされた辞書からプログラムでリソースを取得する必要があります。
私は、私が望むものを得るユーティリティメソッドを思いつきましたが、私にはかなり醜く見えます:
public static async Task<T> GetAppResource<T>(string key) where T:class
{
T resource = default(T);
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
()=>{
foreach (var d in Application.Current.Resources.MergedDictionaries) {
foreach (var pair in d) {
if (pair.Key.ToString() == key && pair.Value is T) {
resource = pair.Value as T;
goto End;
}
}
}
End:;
}
);
return resource;
}
これを行うより良い方法はありますか?
辞書は次のように宣言されます。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..." />
<ResourceDictionary Source="..." />
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
実際、マージされた辞書で宣言されているフライアウトをプログラムで開いています。