2010-07-29 19 views
2

J'ai remarqué que lorsque je modifie la présentation visuelle d'une fenêtre alors que la fenêtre est masquée, les modifications ne sont pas immédiatement visibles lorsque la fenêtre est affichée. Au contraire, la fenêtre apparaît brièvement dans l'état où elle se trouvait lorsqu'elle était visible en dernier, en prenant 0,5 à 1 seconde pour afficher le formulaire mis à jour. Cela peut être déroutant et laid comme quand ma fenêtre est montrée, il est par défaut de n'avoir aucun élément sélectionné, mais s'il y avait des éléments sélectionnés quand il a été fermé, il apparaîtra comme si ces éléments sont sélectionnés à nouveau quand il est ouvert , seulement pour disparaître une seconde plus tard.Forcer WPF à rendre une fenêtre cachée?

Est-il possible de forcer WPF à rendre la fenêtre même si elle n'est pas visible, de sorte que lorsqu'elle est affichée, elle est dans l'état correct?

+0

Comment mettez-vous à jour la fenêtre? Vous pouvez remplacer la méthode OnRender et l'avez fait, vous pouvez aussi appeler UpdateLayout() J'ai fait quelque chose comme vous et je n'ai pas eu ce problème, cela me semble un peu étrange. –

+0

Essayez la méthode window.InvalidateVisual(). Il déclenche l'événement OnRender mais uniquement lorsque la fenêtre est visible, donc je ne suis pas sûr que cela fasse quoi que ce soit pour vous alors que la fenêtre est cachée. Pouvez-vous reproduire ceci dans un échantillon simpliste et nous montrer le code? J'ai essayé de le reproduire moi-même, mais je ne pouvais pas. – Carlo

+0

Malheureusement, il est probablement difficile à reproduire parce que vous auriez besoin d'une fenêtre relativement complexe pour que le retard soit visible. J'ai aussi affaire à des fenêtres custom-chrome, et cela pourrait avoir quelque chose à voir avec ça. – devios1

Répondre

4

Il s'avère qu'il s'agit d'une limitation du système d'exploitation - apparemment WPF ne peut pas accéder à la bitmap de la fenêtre ou quelque chose si la fenêtre est cachée. J'ai trouvé une solution de contournement en définissant l'opacité de la fenêtre à 0 ou 1 au lieu de cacher/montrer et il semble fonctionner plutôt bien.