2009-09-10 9 views
7

mam parę listboxes na WPF Windows, z Height="Auto" Width="Auto" zestaw na formularzuWPF układ na oknie

Wielkości forma doskonale na różnych rozdzielczościach, ale problemem jest to, że po naciśnięciu przycisku maksymalizacji gruba "Czarny L" jest widoczny podczas zmiany rozmiaru formularza. Widziałem to w kilku aplikacjach WPF, ale do tej pory nie musiałem rozwiązywać problemu.

Czy istnieje sposób, aby DoubleBuffer okna, lub wywołać SuspendLayout() w WPF podczas zmiany formantów w formularzu? Jak mogę się pozbyć tego brzydkiego czarnego L?

+1

Czy możesz dodać zrzut ekranu widocznego artefaktu wizualnego? Nie mogę tego sobie wyobrazić. –

+0

Próbowałem wydrukować ekran, ale okna nie wychwytują problemu, ale wykonałem szybką makietę w farbie. http://img16.imageshack.us/img16/403/25229633.png Problem występuje tylko wtedy, gdy w listach listowych znajdują się dane. Jeśli nie dodaję żadnych danych, problem nie pojawi się. To prawie tak, jakby listy list przeładowywały dane po zmianie rozmiaru okna. – Vault

+0

Wygląda na duplikat tego pytania: http: // stackoverflow.com/questions/555326/how-can-i-make-resizing-wpf-windows-less-laggy –

Odpowiedz

3

Cytując jeden z ostatnich Hanselminutes:

Ian Griffiths: ... Tam jest cue win32 który jest zwykłym win32 wiadomość pętla i WPF wiadomości baseny off to i umieszcza je na swój własny cue, a następnie zająć się nim na jego własnym słodki czas, częściowo dlatego, że chce móc zmienić kolejność wydarzeń jak pochodzą one w. będzie on priorytety określone rzeczy powyżej przetwarzania wejściowego, dla przykład, i że przez sposób, dlatego uzyskać nieco dziwaczne repaint magazynowe na zmianę rozmiaru aplikacji WPF, można zauważyć można dostać trochę kawałek pustego miejsca pojawiające tymczasowo przy zmianie rozmiaru okna to dlatego, że to uznając zdarzenie zmiany rozmiaru przed nim rzeczywiście bardzo robi cokolwiek z nim, a następnie farby zdarzają się lekko zsynchronizowane z tym, co zwykle tam jest. Tak więc istnieje jest kolejką komunikatów win32, ale nie jest to w rzeczywistości główna kolejka komunikatów w pakiecie WPF i jest to wszelkiego rodzaju implementacja informacji szczegółowych, które wysyłający próbuje ukryć tak bardzo, jak to możliwe, pod numerem .

Wydaje się mieć znaczenie dla twojego problemu, chociaż nie jestem świadomy kompletnego rozwiązania. Może powinieneś spróbować zmienić priorytety Dyspozytora?

+0

dziękuję za sugestię, postaram się, że – Vault

0

Skarbiec, myślę, że może to mieć coś wspólnego z wirtualizacją interfejsu użytkownika, którą spełniają te listy. Wirtualizacja pozwala listbox ładować tylko te elementy interfejsu, które są renderowane. Listbox robi za pomocą VirtualizingStackPanel jako ItemsPanelTemplate.

Moim zdaniem wydaje się, że maksymalizacja okna spowodowałaby przesunięcie listboxów w celu wygenerowania większej liczby elementów interfejsu użytkownika, a opóźnienie spowodowałoby czarną literę "L".

Można usunąć wirtualizację i sprawdzić, czy czarne "L" nadal się wyświetla. Nawiasem mówiąc, wirtualizacja jest w istocie "dobrą" rzeczą, a wyłączenie jej jest generalnie złym pomysłem.

+1

Usunięcie wirtualizacji nie zadziałało. Szczerze mówiąc, widziałem ten problem w kilku aplikacjach WPF, a programiści zawsze przesuwają problem na tył kolejki, ponieważ jest postrzegany jako niski priorytet – Vault

Powiązane problemy