2010-07-06 10 views
1

J'essaie de transformer du texte en lien hypertexte pendant qu'un utilisateur tape WPF RichTextBox.Comment puis-je convertir du texte en lien hypertexte dans un FlowFocument WPT RichTextBox?

Ma première tentative, il consiste à exécuter ce code à chaque KeyUp:

Regex r = new Regex("[A-Z]{3}"); 
FlowDocument doc = this.inputBox.Document;    
String text = new TextRange(doc.ContentStart, doc.ContentEnd).Text; 

foreach (Match m in r.Matches(text)) 
{ 
    TextPointer start = doc.ContentStart.GetPositionAtOffset(m.Index + 2);     
    TextPointer end = doc.ContentStart.GetPositionAtOffset(m.Index + m.Length + 2); 
    Hyperlink sp = new Hyperlink(start, end); 
} 

Cela fonctionne correctement la première fois qu'un utilisateur entre dans une séquence de 3 lettres majuscules, ABC, mais la création de lien hypertexte échoue avec une exception lorsque une seconde séquence est entrée. En regardant la variable pendant le débogage, il apparaît que les deux TextPointers pointent toujours sur la première séquence.

Répondre

0

Je pense que votre problème peut être dû à une mauvaise compréhension de ce que fait la méthode GetPositionAtOffset().

GetPositionAtOffset retourne le décalage dans le balisage FlowDocument, pas le caractère de texte visible compensé.

Après avoir inséré votre premier lien hypertexte, le FlowDocument contient des balises d'ouverture et de fermeture:

<Hyperlink>the_regex_match</Hyperlink> 

Cela signifie que le FlowDocument le déport ne correspondent plus avec les index de caractères de texte brut retournés par le match RegEx.