2009-09-10 13 views
7

ich ein paar Listboxen auf einem WPF Windows verfügen, mit Height="Auto" Width="Auto" Satz auf dem FormularWPF-Layout auf einem Fenster

Die Formulargrößen perfekt auf verschiedenen Auflösungen, aber das Problem ist, dass, wenn ich drücken Sie die Schaltfläche Maximieren eine dicke "Black L" ist sichtbar, während das Formular die Größe ändert. Ich habe das auf einigen WPF-Anwendungen gesehen, aber musste das Problem bis jetzt nicht lösen.

Gibt es eine Möglichkeit DoubleBuffer das Fenster oder SuspendLayout() in WPF aufzurufen, während die Steuerelemente im Formular geändert werden? Wie kann ich dieses hässliche schwarze L loswerden?

+1

Können Sie einen Screenshot des visuellen Artefakts hinzufügen, das Sie sehen? Ich kann es mir nicht vorstellen. –

+0

Ich habe versucht, Bildschirm zu drucken, aber Windows nicht das Problem, aber ich habe ein schnelles Modell in Farbe gemacht. http://img16.imageshack.us/img16/403/25229633.png Das Problem tritt nur auf, wenn die Listboxen Daten enthalten. Wenn ich keine Daten hinzufüge, tritt das Problem nicht auf. Es ist fast so, als würden die Listboxen die Daten neu laden, wenn die Fenstergröße geändert wird. – Vault

+0

Sieht diese Frage doppelt: http: // stackoverflow.com/questions/555326/how-can-i-make-resizing-wpf-windows-less-lagy –

Antwort

3

Zitiert einer der letzten Hanselminutes:

Ian Griffiths: ... Es gibt die win32 Cue , die eine gewöhnliche win32 Nachrichtenschleife ist und Pools WPF Nachrichten aus, dass von und legt sie auf seine eigene Cue und dann mit ihm auf seine eigene süße Zeit beschäftigen, zum Teil, weil es zu der Lage sein, will die Ereignisse neu zu ordnen, wie sie hereinkommen . es wird priorisieren bestimmte Dinge über die Eingabeverarbeitung, für Beispiel, und dass, durch der weg, warum ist Sie die leicht bizarre repaint Handhabung auf Ändern der Größe von WPF-Anwendungen erhalten, Sie Sie ein wenig bisschen Leerzeichen vorübergehend erhalten haben vielleicht bemerkt, die auftreten, wenn Sie ein Fenster, die Größe es ist, weil es, bevor es die Resize-Ereignis ist die Anerkennung eigentlich wirklich macht alles damit und dann die Farben passieren etwas nicht synchron mit, was normalerweise dort ist. Also dort ist eine Win32-Warteschlange, aber es ist nicht eigentlich die Hauptnachrichtenwarteschlange in WPF und das ist alles Art der Implementierung Details der Dispatcher versucht, so viel wie möglich darüber zu verbergen.

Es scheint relevant für Ihr Problem, obwohl ich keine vollständige Lösung kenne. Vielleicht sollten Sie versuchen, einige Dispatcher-Prioritäten zu ändern?

+0

danke für den Vorschlag, ich werde versuchen, dass – Vault

0

Vault, ich denke, das kann etwas mit der UI-Virtualisierung zu tun haben, die Listboxen ausführen. Durch die Virtualisierung kann die Listbox nur die UI-Elemente laden, die gerendert werden. Die Listbox verwendet VirtualizingStackPanel als ItemsPanelTemplate.

Also meine Vermutung scheint zu sein ... dass das Maximieren des Fensters die Listboxen dazu gebracht hätte, mehr UI-Elemente zu erzeugen, und die Verzögerung hätte das schwarze "L" ausgelöst.

Sie können die Virtualisierung entfernen und prüfen, ob das schwarze "L" weiterhin angezeigt wird. Virtualisierung ist übrigens eine "gute Sache", und es ist generell eine schlechte Idee, sie zu deaktivieren.

+1

Entfernen der Virtualisierung hat nicht funktioniert. Um ehrlich zu sein, ich habe dieses Problem in einigen WPF-Anwendungen gesehen, und Entwickler schieben das Problem immer an die Rückseite der Warteschlange, da es als niedrige Priorität angesehen wird – Vault

Verwandte Themen