UWP界にはTypeConverterがありません。どういうことかというと、WPFでXamlの引数みたいなのいい感じに型に変換してくれる便利クラスTypeConverterが存在しないんです。
んでもって、仕方なくこんなのを作っていたのですが。
private static object ConvertType(string from, string type) { try { // Get Internal method var typeName = typeof(EventTriggerBehavior).AssemblyQualifiedName .Replace(".EventTriggerBehavior,", ".TypeConverterHelper,"); var typeConverterHelperType = Type.GetType(typeName); var typeConverterHelperConvert = typeConverterHelperType .GetRuntimeMethod("Convert", new[] { typeof(string), typeof(string) }); return typeConverterHelperConvert.Invoke(null, new object[] { from, type }); } catch { return null; } }
Behavior SDKの中のプライベート関数をリフレクションでぶったたいてみるとなんか文字列をいい感じの型に変換してくれちゃったりする。 で、UWPが静的バインディングをサポートした関係で似たような動作をする関数がこそっと増えてたみたい。それがXamlBindingHelper.ConvertValue。
使い方はとってもシンプル
// Uriとか Debug.WriteLine(Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(Uri), "http://www.gogle.com/")); // doubleとか Debug.WriteLine(Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(double), "10.5")); // Visibility.Collapsedとか Debug.WriteLine(Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(Visibility), "Collapsed")); // ImageSourceまで Debug.WriteLine(Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(ImageSource), "http://www.google.com/"));
変換できちゃうわけです。文字列から。いつどこで使うか?といわれるとあんまりないかもしれないですけど、Xamlで条件分岐するようなライブラリ使うときには便利ですよ、それはとても。