2010-06-08 7 views
1

Nous avons une application Silverlight utilisant RichTextBox comme éditeur de texte enrichi pour créer des courriels.Silverlight 4 RichTextBox - impossible de restaurer Xaml avec du texte contenant des accolades

Nous avons en fait notre propre sérialiseur mais essentiellement nous sauvegardons et restaurons le Xaml. Autant que je sache, il est impossible de restaurer un texte contenant des accolades.

Vous pouvez le démontrer assez facilement en créant un RichTextBox et en y tapant quelque chose de similaire à {weird}. Prenez ensuite la propriété .Xaml de la zone de texte et définissez-la sur la propriété .Xaml d'une autre zone de texte - kablooie.

Comme nous avons notre propre sérialiseur, j'ai essayé d'échapper le membre Text des éléments Run avec <Run Text="{} the real {Text} here" />. Cela ne fait aucune différence. J'ai essayé de remplacer les accolades par & # 123; mais ça ne marche pas non plus.

Répondre

2

Reconnaître le problème ici et vérifier avec l'équipe. Si le Run démarre avec des accolades, il semble lancer une exception de valeur. J'étudie. Un développeur Silverlight a confirmé qu'il s'agissait d'un bogue.

0

Cela ressemble à un problème XML. Avez-vous essayé d'encapsuler vos données dans un bloc CDATA pour encapsuler des caractères spéciaux?

<richtext> 

    <![CDATA[ 
    function matchwo(a,b) 
    { 
    if (a < b && a < 0) then 
     { 
     return 1; 
     } 
    else 
     { 
     return 0; 
     } 
    } 
    ]]> 

<richtext> 
+0

La mise en place du texte d'exécution dans un bloc CDATA n'est malheureusement pas prise en charge par Silverlight XamlReader. – fuzzyman

0

Cela arrive si le Run Text commence par un '{' ou un espace suivi de '{'. Parce que nous avons notre propre sérialiseur, je peux insérer un espace de largeur zéro (& # 8203;) au début de chaque course qui résout le problème.

0

essayer échapper avec {}{weird} (accolades ouvertes et fermées)

+0

N'aide pas (nous avons essayé cela en premier - j'aurais dû le mentionner dans la question). Le problème est un bogue dans la RichTextBox de Silverlight. – fuzzyman

1

Ce problème se produit également dans le Windows Phone 7 (Mango) RichTextBox. J'ai trouvé un workaround here qui consiste à mettre un caractère &#8204; non-menuisier de largeur nulle au début et à la fin de chaque Run. Par opposition à l'utilisation de l'espace de largeur nulle, cela fonctionne également si vous avez une accolade d'ouverture au début et une accolade de fermeture à la fin.