2009-07-31 7 views
3

XAMLパーサーは、Foreground = "Red"の文字列 "Red"をSolidColorBrushに変換するにはどうすればよいですか?私はWPF XAMLパーサーが文字列をブラシに変換するために常に使用することを覚えていますが、TypeにはSystem.ComponentModel.TypeConverterが定義されています。特定のプロパティのattibuteのように単一の文字列を解析するために使用できるXamlReader.Load(有効なxml文字列が必要です)以外のXAML APIはありますか?XAML属性として文字列を手動で解析します

答えて

-1

私はあなた自身でこれを利用できると信じています。 XamlReaderは、対象の型(文字列を適用する必要があるプロパティの型)を認識します。そのプロパティの型のTypeConverterを登録します。

EDITこれはあなたのために動作します、それはSolidColorBrushに来るとき:

.NETリフレクターで SolidColorBrushを見ると
var colorString = ...; 
var converter = new System.Windows.Media.BrushConverter(); 
var brush = (SolidColorBrush)converter.ConvertFromString(colorString); 

XamlReader内のデシリアライズを行う魔法が知られている種類の周りに内部APIを使用していますようです。これを処理するために独自の型を登録できるかどうかはわかりません。

+0

はい、これは私がそれをやり直す方法です。しかし、私は、XamlReaderが文字列を解析するために常にTypeConvertersを使用するわけではないことに気付きました。したがって、XamlReaderは、これらの型変換器とは別にパースするためのロジックをさらに持たなければなりません。私の質問はどこかにAPIとして公開されていますか? – bitbonk

0

XAMLパーサー(WPF用)は実際に指定されたプロパティまたはプロパティタイプの型変換器を実際に使用します。いくつかのハードコーディングされたショートカットがありますが、それらはパフォーマンスのためのものであり、セマンティクスを変更しません。パーサーは、属性情報を使用するだけで、パーサーのセマンティクス(たとえば、BlendとCiderの機能)を複製できます。

多くの型変換がXAML解析のコンテキストでのみ機能するため、XAMLとまったく同じ値を変換するAPIはありません。たとえば、タイプコンバータは、XAMLファイルで定義された名前空間(値がXMLファイルのどこにあるかによって変わります)と、ファイルの他のアンビエント情報ベースURIベースを参照できます。これらは、XAMLファイルが解析されている場合にのみ実際に適用されます。

最も近いのは、タイプ記述子からプロパティのプロパティ記述子を要求し、Converterプロパティを使用することです。適切な属性をスキャンして正しいタイプコンバータを作成します。

関連する問題