Xaml オブジェクトの文字列表現がいくつかあり、コントロールを構築したいと考えています。これを行うためにXamlReader.Parse関数を使用しています。パラメーターを取らないデフォルトのコンストラクターを持つ Button などの単純なコントロールの場合、これは正常に機能します。
var buttonStr = "<Button xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">Text</Button>";
var button = (Button)XamlReader.Parse(buttonStr);
ただし、ストローク コントロールなどにこれを実行しようとすると失敗します。最初に単純な空の Stroke を試します:
var strokeStr = "<Stroke xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"></Stroke>";
var stroke = (Stroke)XamlReader.Parse(strokeStr);
これにより、次のエラーが発生します。
タイプ 'System.Windows.Ink.Stroke' のオブジェクトを作成できません。CreateInstance が失敗しました。これは、'System.Windows.Ink.Stroke' のパブリックな既定のコンストラクターがないことが原因である可能性があります。
Stroke の定義では、少なくとも StylusPointsCollection を構築する必要があることがわかります。これはエラーが私に言っていることだと思いますが、これは XamlReader によって処理されると想定していました。StylusPoints を含む Stroke の Xaml を変換しようとすると、同じエラーが発生します。
var strokeStr =
"<Stroke xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">" +
"<Stroke.StylusPoints>" +
"<StylusPoint X=\"100\" Y=\"100\" />" +
"<StylusPoint X=\"200\" Y=\"200\" />" +
"</Stroke.StylusPoints>" +
"</Stroke>";
var stroke = (Stroke) XamlReader.Parse(strokeStr);
私は何を間違っていますか?Stroke を正しく作成する方法を XamlReader に伝えるにはどうすればよいですか?