Mon objectif est de créer un contrôle TextBlock personnalisé qui a une nouvelle propriété de dépendance, SearchText. Cette propriété contiendra une expression régulière. Toutes les occurrences de cette expression régulière dans le texte du TextBlock seront mises en évidence en utilisant un style personnalisé (un autre DP).Mettre en évidence Rechercher TextBlock
Ma mise en œuvre actuelle implique la suppression de tous les objets Inline dans InlineCollection du bloc de texte. Je remplis alors le TextBlock avec des exécutions pour le texte non surligné et exécute pour le texte surligné avec le style appliqué (cette méthode ne supporte pas l'addition de lignes directement au TextBlock, au lieu que TextBlock.TextProperty doit être utilisé).
Fonctionne très bien, mais parfois je reçois une exception étrange en essayant d'effacer les Inlines: InvalidOperationException: "Impossible de modifier les enfants logiques pour ce noeud à ce moment car une marche en arbre est en cours." Ce problème semble être lié à this un. Je modifie les inlines dans la fonction TextChanged, mais j'utilise un indicateur pour éviter les modifications récursives infinies.
Avez-vous des idées sur la façon d'architecturer ce contrôle personnalisé? Y a-t-il une meilleure manière de faire cela? Comment contourner cette exception?
Merci!
Il est recommandé de fournir un résumé de ce qui est dans le lien au cas où il serait cassé. –