Niedawno wpadłem na podobny problem z czarnym oknem w WPF, w rozwiązaniu VB 2010/.Net 4.0, gdzie każde inne okno działało dobrze. Sprawcą okazał się sposób, w jaki przełączałem widoczność, używając poniższych 3 poleceń poniżej. Rozwiązaniem było usunąć wszystkie oprócz pierwszej linii, ten z odniesieniem właściwość widoczności (usuwanie tylko linię .Show spowodowałoby to uczynić poprawnie za pierwszym razem, ale potem czarny):
Application.MisbehavingBlackWindow.Visibility = System.Windows.Visibility.Visible
Application.MisbehavingBlackWindow.Show()
Application.MisbehavingBlackWindow.Activate()
ja nigdy Przedtem miałem problem z serią komend pokazywania okna WPF, więc domyślam się, że wpadłem w rutynę i nigdy nie zawracałem sobie głowy sprawdzeniem, czy to był optymalny sposób, aby to osiągnąć; z przyzwyczajenia właśnie wkleiłem kod w razie potrzeby, aby przywołać okna. Wciąż działa dla każdego innego okna w każdym innym rozwiązaniu, jakie kiedykolwiek napisałem, ale spowodowało, że to jedno okno zmieniło kolor na czarny. Początkowo zdarzało się to tylko sporadycznie w jednej konkretnej rutynie, potem stało się stałe z nieznanych przyczyn. Żadna z następujących linii kodu eksperymentowałem z wykonanej żadnej różnicy:
Application.MisbehavingBlackWindow.InvalidateVisual()
Application.MisbehavingBlackWindow.InvalidateArrange()
Application.MisbehavingBlackWindow.UpdateLayout()
Application.MisbehavingBlackWindow.BringIntoView()
Application.MisbehavingBlackWindow.WindowState = WindowState.Minimized
Application.MisbehavingBlackWindow.WindowState = WindowState.Normal
odizolowania wszystkich kontroli przez okno nie miał wpływu; nadal będzie czarny, jeśli zostanie wypełniony tylko przez jedną blokadę tekstu. Z drugiej strony pojawił się wzorzec po tym, jak spróbowałem wykonać go z innych procedur, szczególnie jeśli wkleiłem pierwszy blok kodu wewnątrz tego, który wywołał kolejne okno. Jeśli wstawiłem go tuż przed blokiem kodu podobnym do poniższego, okno zmieniło się na czarne; jeśli wstawiłem to później, nie.
Application.OtherWindow.Visibility = System.Windows.Visibility.Visible
Application.OtherWindow.Show()
Application.OtherWindow.Activate()
Rozwiązanie działa (do tej pory), nawet jeśli okno jest ukryte za pomocą polecenia Window.Hide(). Miałem już jeden zawarty w zdarzeniu Sub wewnątrz obrażającego się okna, które zostało wywołane za każdym razem, gdy okno straciło ostrość. Ponowne przełączenie go za pomocą właściwości Visibility nadal wykonuje lewę, nie wymagając żadnych zmian w tym. Ukryte oświadczenie.
Mam nadzieję, że pomoże to każdemu, kto przejdzie przez ten irytujący problem. Jak dotąd większość rozwiązań rozproszonych w Internecie wydaje się być opartych na takich rzeczach jak Motywy Windows, karty graficzne i inne zmienne zewnętrzne, ale możemy najwyraźniej naprawić przynajmniej niektóre przykłady tego prawa w naszym kodzie .Net za.
Miałem ten sam problem, używając tej samej techniki. – VHanded
rozwiązałeś to? –
@Luis Filipe - Nie, nie rozwiązałem tego, klient, który miał ten problem, postanowił przejść na inny produkt (nic dziwnego) i nie otrzymałem skarg na ten problem od nikogo innego, mam nadzieję, że znajdziesz rozwiązanie – Nir