2010-10-31 5 views

Répondre

0
TextPointer tp = RTB.Document.ContentStart; 
TextRange word = WordBreaker.GetWordRange(tp); 

    while (word.End.GetNextInsertionPosition(LogicalDirection.Forward) != null) 
     { 
      if (word.GetPropertyValue(TextElement.FontStyleProperty).ToString() == "Italic") 
      { 

      } 
      word = WordBreaker.GetWordRange(word.End.GetNextInsertionPosition(LogicalDirection.Forward)); 
     } 
    } 

avec classe wordbreaker de http://blogs.msdn.com/b/prajakta/archive/2006/11/01/navigate-words-in-richtextbox.aspx

0

Eh bien, votre tâche semble être un assez compliqué. Le contenu d'un RichTextBox est un FlowDocument qui peut être trouvé à la propriété Document. Le FlowDocument, à son tour, se compose de plusieurs Blocks.

Chacun des Block s peut être un Paragraph, un Section, un Table etc. Vous aurez besoin d'analyser chacun d'eux séparément.

Pour Paragraph, il se compose de plusieurs Inlines, chacun d'eux peut être un Span, qui à son tour peut être un Italic. Le Italic représente le texte en italique. Le Italic peut, à son tour, avoir d'autres inlines, contenant d'autres Span s (par exemple, Hyperlink s, que vous pouvez ou ne voulez pas inclure dans votre résultat).

Vous vous devez fondamentalement traverser toute la structure récursivement et jeter un coup d'oeil le texte de votre Italic s. Un cas particulier peut être les mots où seulement une partie est en italique, vous aurez besoin d'avoir une stratégie pour eux. Je n'ai pas connaissance de méthodes plus simples pour réaliser ce que vous voulez. HTH.

Edit:
Peut-être une solution de rechange plus facile serait de parcourir tout le texte en utilisant TextPointer depuis le début (richTextBox.Document.ContentStart), le passage à la position suivante avec position.GetNextContextPosition(LogicalDirection.Forward) et tester si votre position actuelle est à l'intérieur d'un Italic en utilisant position.Parent. Vous devriez cependant vous préoccuper que Italic puisse être un parent non-immédiat, donc vous devrez peut-être traverser plusieurs parents vers le haut. Disclaimer: Je n'ai jamais essayé cette idée dans mon code.

+0

je votre idée de base de vérifier chacun pour voir si elle est en italique ou non – mike

+0

TextPointer tp = RTB.Document.ContentStart; TextRange word = WordBreaker.GetWordRange (tp); while (word.End.GetNextInsertionPosition (LogicalDirection.Forward)! = Null) { if (word.GetPropertyValue (TextElement.FontStyleProperty) .ToString() == "Italic") { } mot = wordbreaker .GetWordRange (word.End.GetNextInsertionPosition (LogicalDirection.Forward)); } } – mike

+0

avec la classe WordBreaker à l'adresse http://blogs.msdn.com/b/prajakta/archive/2006/11/01/navigate-words-in-richtextbox.aspx – mike

Questions connexes