Salut à tous,
J'essaie d'utiliser ce joli contrôle pour afficher du texte avec un tooltip différent au dessus de chaque mot: https://wpfbookcontrol.codeplex.com/
Pour le moment, j'ai un objet usercontrol "MaPage" constitué d'un wrappanel conteneur. Dans mon backgroundworker , je souhaite itérer sur une collection et créer à chaque passe un textblock spécifique qui est ajouté en enfant du wrappanel. Ca me permet d'afficher du texte avec un tooltip par mot.
le code fonctionne correctement lorsqu'il est exécuté dans le thread de l'UI, mais il y a deux inconvénients majeurs:
- Il freeze l'interface, ce qui est un peu normal puisque mon itération prend la main sur l'UI.
- Il charge toute la collection dans "MaPage" vu que l'évènement WrapPanel.SizeChanged n'est pas levé. Or, je pensais utiliser cet évènement pour arrêter l'itération lorsque les textblocks "débordent" du usercontrol "MaPage" en comparant la taille du wrappanel à celle de du usercontrol.
Pour régler ça, j'ai essayé de mettre mon code dans un backgroundworker mais le problème c'est qu'il refuse de créer des éléments d'interface (le thread appelant doit être en mode STA). Si j'utilise un dispatcher.invoke pour créer le controle (textblock), je ne peux pas y accéder ensuite vu qu'il n'appartient pas au background worker.
Est-ce que quelqu'un a une solution à proposer pour ce problème? Par ailleurs, quelle méthode me conseilleriez vous pour détecter que le wrappanel est plein?
Merci!
Partager