Comment pouvez-vous boucler tous les «mots» (espaces suppriment des mots) dans un RTB (contrôle WPF) pour voir ceux qui sont en italique?WPF RichTextBox Contrôle, comment trouver tous les mots en italique
grâce
Comment pouvez-vous boucler tous les «mots» (espaces suppriment des mots) dans un RTB (contrôle WPF) pour voir ceux qui sont en italique?WPF RichTextBox Contrôle, comment trouver tous les mots en italique
grâce
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
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.
je votre idée de base de vérifier chacun pour voir si elle est en italique ou non – mike
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
avec la classe WordBreaker à l'adresse http://blogs.msdn.com/b/prajakta/archive/2006/11/01/navigate-words-in-richtextbox.aspx – mike