2009-08-11 12 views
16

Sprzedaję aplikację WPF, na jednym komputerze klienta (na kilkaset) całe okno aplikacji jest czarne, czy ktoś wie co się dzieje?Okno wpf całkowicie czarne

Na komputerze działa system Windows XP z .net 3.5SP1, karta graficzna to GeForce 6200 z dwoma monitorami (wyłączenie jednego monitora nie rozwiązuje problemu).

Ustawienie "Ustawienia zgodności" na "256 kolorów" rozwiązuje problem (ale nie jest to opłacalne rozwiązanie, potrzebuję więcej kolorów, aby aplikacja wyglądała dobrze).

Aplikacja jest yaTimer (http://www.nbdtech.com/yaTimer/), ma niestandardowe okno chrome oparte na technikach opisanych w tym poście http://blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx w sekcji "Office 2007 bez Aero".

Jeśli ktoś może dać mi wskazówkę, co się dzieje, będę bardzo wdzięczny.

Dzięki.

+0

Miałem ten sam problem, używając tej samej techniki. – VHanded

+0

rozwiązałeś to? –

+0

@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

Odpowiedz

0

brzmi podobnie do problemu miałem drugą noc i zamieszczonych tutaj:

Question: WPF - No Content Rendered

Sprawdź sterowniki karty wideo jako jedną z możliwości

+0

Dzięki, ale sterowniki są już najnowszą wersją. – Nir

+0

Mam ten problem na połączenie zdalnego pulpitu. Z mojego komputera działa dobrze; Z innego komputera wyświetla czarne okno –

+0

Mam ten problem ze sterownikami ATI w telefonach komórkowych. – decompiled

1

miałem problem z ręcznym szablon okna. Stwierdziłem, że jeśli tylko odziedziczysz styl okna w Motywy/Generic.xaml, to działa. Ale w każdym innym Zasobie dostaniesz czarne okno. (VS 2008 - WPF 3.5)

0

Spróbuj zainstalować najnowszy pakiet DirectX na komputerze klienta.

1
+0

Sprawdzę to, gdy tylko będę miał czas. –

+0

To nie rozwiązuje problemu; Nie mogę uważać tego za "odpowiedź", ale za spekulację. – Sung

7

My (www.novamind.com) mieliśmy wielu klientów w przeszłości, mających podobne problemy, gdy aplikacja nie rysowała poprawnie lub wcale. Przyczyny:

  • Sterownik graficzny nie jest aktualny.
  • Motyw systemu Windows jest uszkodzony. Zmiana motywu Windows na coś innego iz powrotem, rozwiązała problem.
  • System Windows działa na maszynie wirtualnej. Większość maszyn wirtualnych ma eksperymentalną funkcję przyspieszania sprzętowego, która często nie obsługuje poprawnie aplikacji WPF. - Wyłączenie przyspieszania sprzętowego rozwiązuje problem.

To może pomóc także:

  • ponownie zainstalować .NET Framework - czasami instalacja jest uszkodzona.
  • Upewnij się, że wszystkie najnowsze aktualizacje systemu Windows są zainstalowane.

Mam nadzieję, że to pomoże. Powodzenia.

+0

Nie mogłem zidentyfikować źródła problemu, ponieważ nie wystąpiło ono ponownie. Przyznałem nagrodę za tę nagrodę, ponieważ wydawało się to najbardziej prawdopodobnym problemem. Przepraszamy za wszystkie pozostałe. –

2

Mam ten problem tylko z włączoną opcją GlassFrame w oknie przeglądarki.

Spróbuj ustawić GlassFraneThickness na 0, a okno zostanie wyświetlone ponownie. Stracisz szklaną ramę, ale lepiej niż czarna.

<shell:WindowChrome.WindowChrome> 
    <shell:WindowChrome CaptionHeight="32" GlassFrameThickness="0" ResizeBorderThickness="5" CornerRadius="0" /> 
</shell:WindowChrome.WindowChrome> 

Może można również spróbować zmusić okno do odmalowania. W moim przypadku zawartość okna pokazywała się, kiedy przeniosłem okno na inny monitor lub poza wizjer i ponownie, więc odmalowanie wydaje się wykonywać tę pracę.

W Microsoft.Windows.Shell źródłowego nie jest funkcją _FixupWindows7Issues() (w WindowChromeWorker klasy), które powinny rozwiązać problem zgodnie z jego komentarz, ale oczywiście nie ...

+0

Ustawienie GlassFrameThickness = "0" dla mnie. – RHaguiuda

0

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.