2010-09-28 8 views
1

J'ai un contrôle winforms dans un WindowsFormsHost sur un contrôle WPF. Le contrôle WPF n'est visible que de temps en temps, et lorsqu'il devient visible, le contenu du contrôle winforms a généralement changé.Comment repeindre un WinFormsHost quand il devient visible?

Lorsque le ViewModel pour le contrôle WPF change, je modifie le contenu du contrôle WinForms et le contrôle WPF devient visible.

Malheureusement, le contenu précédent du contrôle winforms est repeint, comme s'il provenait d'un cache visuel. Je l'ai exécuté dans le débogueur et je sais que le contrôle winforms met ses données à jour, mais il ne sera pas repeint jusqu'à ce que je redimensionne la fenêtre du programme (quand une repeinte est clairement déclenchée).

J'ai essayé Invalidate() sur le contrôle winforms et InvalidateVisual(), InvalidateArrange() et InvalidateMeasure() sur le contrôle WPF dans le gestionnaire d'événements DataContextChanged pour le contrôle WPF, mais il semble que parce que le contrôle WPF est pas visible à ce stade (il est sur le point de devenir visible) ces appels de méthode sont avalés.

Tout le monde a-t-il eu des idées astucieuses sur la façon de forcer une reprise d'un contrôle winFormsHost-ed winforms immédiatement après que le contrôle WPF hôte devient visible?

Répondre

0

Cela s'est avéré être dû à la structure de données sous-jacente qui n'a pas notifié qu'il avait changé - rien à voir avec les méthodes de peinture du tout! :(Merci pour votre aide les gars

0

Avez-vous essayé d'invalider le contrôle WinForms dans le gestionnaire d'événements IsVisibleChanged?

+0

Non, mais j'ai maintenant et cela n'a pas fonctionné non plus.Je suppose que c'est le même problème que le gestionnaire IsVisibleChanged est appelé en réponse à la modification de la visibilité, mais avant qu'il ne change en fait –

+0

Non, il est supposé être déclenché après que le contrôle devienne visible ou caché ... –

0

Vous devriez pouvoir appeler Refresh() sur le contrôle hébergé dès que vous le rendez visible. Refresh(), conformément à la documentation:

Force le contrôle à invalider sa zone client et à redessiner immédiatement lui-même et tous les contrôles enfants.

+0

Malheureusement, cela n'a pas fonctionné non plus - parce que dans le gestionnaire DataContextChanged le contrôle winforms, son WindowsFormsHost et le contrôle WPF sont tous réduits - la peinture est donc avalée . –

Questions connexes