Utilisation de XamlReader pour des contrôles n’ayant pas de constructeur par défaut

J’ai quelques représentations sous forme de chaîne d’objects Xaml et je veux construire les contrôles. J’utilise la fonction XamlReader.Parse pour le faire. Pour un contrôle simple tel que Button dont le constructeur par défaut ne prend aucun paramètre, cela fonctionne bien:

var buttonStr = ""; var button = (Button)XamlReader.Parse(buttonStr); 

Cependant, lorsque j’essaie de le faire, par exemple pour un contrôle Stroke, il échoue. Commençons par essayer un simple trait vide:

 var strokeStr = ""; var stroke = (Stroke)XamlReader.Parse(strokeStr); 

Cela donne l’erreur:

Impossible de créer un object de type ‘System.Windows.Ink.Stroke’. CreateInstance a échoué, ce qui peut être dû à l’absence de constructeur public par défaut pour ‘System.Windows.Ink.Stroke’.

Dans la définition de Stroke, je vois qu’il faut au moins un StylusPointsCollection pour être construit. Je suppose que c’est ce que l’erreur me dit, bien que je suppose en quelque sorte que cela serait géré par XamlReader. Essayer de transformer un Xaml de Stroke contenant des StylusPoints génère la même erreur:

 var strokeStr = "" + "" + "" + "" + "" + ""; var stroke = (Stroke) XamlReader.Parse(strokeStr); 

Qu’est-ce que je fais mal? Comment puis-je dire à XamlReader comment créer correctement le Stroke?

C’est une “fonctionnalité” du langage XAML, elle est déclarative et ne connaît rien des constructeurs.

Les gens utilisent ObjectDataProvider dans XAML pour “traduire” et encapsuler les instances de classes qui n’ont pas de constructeur sans paramètre ( utile également pour la liaison de données ).

Dans votre cas, le code XAML devrait ressembler à peu près à ceci:

         

Et le code devrait être:

 var stroke = (Stroke) ((ObjectDataProvider)XamlReader.Parse(xamlStr)).Data; 

HTH.