2009-08-11 16 views
16

Vendo un'applicazione WPF, su una macchina cliente (su diverse centinaia) l'intera finestra dell'applicazione è nera, qualcuno sa cosa sta succedendo?finestra wpf interamente nera

La macchina esegue Windows XP con .net 3.5SP1, la scheda grafica è GeForce 6200 con due monitor (la disattivazione di un monitor non risolve il problema).

L'impostazione "Impostazioni di compatibilità" su "256 colori" risolve il problema (ma non è una soluzione praticabile, ho bisogno di più colori affinché l'app abbia un bell'aspetto).

L'applicazione è yaTimer (http://www.nbdtech.com/yaTimer/), ha finestra personalizzata cromato in base alle tecniche descritte in questo post http://blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx nella sezione "Office 2007 senza Aero".

Se qualcuno può darmi un indizio su cosa sta succedendo, sarò molto grato.

Grazie.

+0

Ho avuto lo stesso problema, utilizzando la stessa tecnica. – VHanded

+0

hai risolto questo? –

+0

@Luis Filipe - No, non ho risolto questo problema, il cliente che ha avuto questo problema ha deciso di passare a un prodotto diverso (non sorprendente) e non ho ricevuto lamentele da parte di nessun altro, spero che tu trovi la soluzione – Nir

risposta

0

suona simile al problema che ho avuto l'altra sera e postato qui:

Question: WPF - No Content Rendered

Controllare i driver della scheda video come una possibilità

+0

Grazie, ma i driver sono già la versione più recente. – Nir

+0

Ho questo problema su una connessione desktop remoto. Dal mio computer funziona bene; Da un altro computer mostra una finestra nera –

+0

Ho riscontrato questo problema con i driver ATI sui cellulari. – decompiled

1

ho avuto il problema con il modello di override finestra. Ho capito che se tu hai ereditato lo stile di finestra in Temi/Generic.xaml, funziona. Ma in qualsiasi altra risorsa otterrai una finestra nera. (VS 2008 - WPF 3.5)

0

Provare a installare l'ultimo pacchetto DirectX sul computer client.

1

Una possibile soluzione è quella di forzare il rendering modalità software:

http://msdn.microsoft.com/en-us/library/system.windows.interop.rendermode.aspx

In 3.5 questo può essere impostato su una per ogni finestra basi http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndtarget.rendermode%28VS.90%29.aspx e in 4,0 v'è inoltre un ambiente ampio processo: http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.processrendermode.aspx

+0

Lo controllerò appena ho tempo a disposizione –

+0

Questo non risolve il problema reale; Non posso considerarlo una "risposta" ma una speculazione. – Sung

7

Noi (www.novamind.com) abbiamo avuto in passato più clienti con problemi simili a quelli in cui l'applicazione non veniva disegnata correttamente o per nulla. Motivi erano:

  • driver grafico non è aggiornato.
  • Il tema di Windows è danneggiato. Cambiando il tema di Windows in qualcosa di diverso e viceversa, risolto il problema.
  • Windows è in esecuzione in una macchina virtuale. La maggior parte delle macchine virtuali ha una funzione di accelerazione hardware sperimentale che spesso non supporta correttamente le applicazioni WPF. - Disattivare l'accelerazione hardware risolve il problema.

Questo può anche aiutare:

  • Reinstallare il .NET framework - a volte l'installazione è danneggiato.
  • Assicurarsi che tutti gli aggiornamenti di Windows recenti siano installati.

Spero che questo aiuti. In bocca al lupo.

+0

Non sono riuscito a identificare l'origine del problema in quanto non si è verificato nuovamente. Ho assegnato la taglia per questo perché mi sembrava il problema più plausibile. Ci scusiamo per tutti gli altri rimasti indietro. –

2

Ho questo problema solo con GlassFrame abilitato nella finestra di chome.

Provare a impostare GlassFraneThickness su 0 e la finestra eseguirà nuovamente il rendering. Perderete comunque la cornice Glass, ma meglio di un'app nera.

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

Forse si può anche provare a forzare la finestra a ridipingere. Nel mio caso il contenuto della finestra ha mostrato quando ho spostato la finestra sull'altro monitor o fuori dal viewport e di nuovo in, quindi un repaint sembra fare il lavoro.

Nel Microsoft.Windows.Shell Sourcecode C'è una funzione _FixupWindows7Issues() (nella classe diWindowChromeWorker) che dovrebbe risolvere il problema in base al suo commento, ma ovviamente non lo fa ...

+0

Impostazione GlassFrameThickness = "0" corretto per me. – RHaguiuda

0

Recentemente ho riscontrato un problema simile con una finestra nera in WPF, in una soluzione VB 2010/.Net 4.0 in cui ogni altra finestra funzionava perfettamente. Il colpevole si è rivelato il modo in cui stavo attivando la visibilità, usando i seguenti 3 comandi qui sotto. La soluzione era quella di rimuovere tutto, ma la prima linea, quella con il riferimento proprietà Visibility (togliendo solo la linea .Show lo farebbe per rendere correttamente la prima volta, ma da allora in poi il nero):

   Application.MisbehavingBlackWindow.Visibility = System.Windows.Visibility.Visible 
      Application.MisbehavingBlackWindow.Show() 
      Application.MisbehavingBlackWindow.Activate() 

avrei mai prima aveva un problema con questa serie di comandi per mostrare una finestra WPF, quindi credo di essere entrato in un solco e non mi sono mai preso la briga di verificare se fosse il modo migliore per farlo; per abitudine, ho appena incollato il codice necessario per richiamare finestre. Funziona ancora per ogni altra finestra in ogni altra soluzione che abbia mai scritto, ma ha causato l'oscuramento di questa particolare finestra. All'inizio si verificava solo in modo intermittente in una particolare routine, quindi divenne permanente per ragioni sconosciute. Nessuno dei seguenti righe di codice che ho sperimentato con fatto alcuna differenza:

  Application.MisbehavingBlackWindow.InvalidateVisual() 
      Application.MisbehavingBlackWindow.InvalidateArrange() 
      Application.MisbehavingBlackWindow.UpdateLayout() 
      Application.MisbehavingBlackWindow.BringIntoView() 
      Application.MisbehavingBlackWindow.WindowState = WindowState.Minimized 
      Application.MisbehavingBlackWindow.WindowState = WindowState.Normal 

Spogliarello tutti i controlli fuori dalla finestra non ha avuto effetto; diventerebbe ancora nero se fosse popolato solo da un singolo TextBlock. D'altra parte, un pattern è emerso dopo aver provato ad eseguirlo da altre routine, in particolare se si è incollato il primo blocco di codice all'interno di uno che ha richiamato un'altra finestra. Se l'ho inserito appena prima di un blocco di codice come quello qui sotto, la finestra è diventata nera; se l'ho inserito dopo, non è così.

   Application.OtherWindow.Visibility = System.Windows.Visibility.Visible 
       Application.OtherWindow.Show() 
       Application.OtherWindow.Activate() 

La soluzione funziona (finora) anche se la finestra è nascosta utilizzando un comando Window.Hide(). Ne avevo già uno incluso in un evento Sub all'interno della finestra incriminata, che è stato attivato ogni volta che la finestra ha perso il focus. Riattivare l'utilizzo della proprietà Visibility continua a fare il trucco senza richiedere alcuna modifica a tale istruzione.

Spero che questo aiuti chiunque che attraversa questo problema irritante. Finora, la maggior parte delle soluzioni che ho visto sparse su Internet sembrano essere basate su temi come temi di Windows, schede grafiche e altre variabili esterne, ma possiamo apparentemente risolvere almeno alcune istanze di questo diritto nel nostro codice .Net dietro a.

Problemi correlati