2010-08-03 24 views
6

Abbiamo un progetto molto grande. Il log di output di debug di Visual Studio contiene numerosi errori di binding WPF ripetuti. Ad esempio:
Come cercare gli errori di binding WPF?

System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='NaN' BindingExpression:Path=Width; DataItem='ContentPresenter' (Name=''); target element is 'ContentPresenter' (Name=''); target property is 'MaxWidth' (type 'Double')

Le linee vengono stampate quando viene eseguita una certa azione. Tuttavia, questa è un'operazione molto pesante, in cui sono coinvolte decine di classi WPF.

C'è un modo rapido per trovare la fonte esatta dell'errore di associazione? Qualche strumento che potrebbe aiutare?

risposta

5

L'errore visualizzato è dovuto al fatto che il di un controllo è associato allo Width di un altro controllo. MaxWidth deve avere un valore numerico definito, ma Width può avere diversi valori non definiti, a seconda del layout utilizzato. In questo caso, la larghezza del controllo sorgente è NaN - che è un valore non valido per MaxWidth. Questo sta causando l'errore.

Quindi, sarei in cerca di un binding su un controllo in cui si sta impostando MaxWidth="{Binding Width, ElementName=someElement}" o simile.

A occhio e croce, che il legame è stato messo in atto a causa di un controllo è contenuto all'interno di un pannello di layout come un StackPanel che non vincolare la dimensione dei suoi figli, e qualcuno ha cercato di legare MaxWidth per affrontare le questioni di ritaglio. Una soluzione migliore è quella di passare a un controllo del pannello che ne limita la dimensione del contenuto.

L'operazione che viene eseguita probabilmente non ha nulla a che fare con l'errore in questo caso, tranne che sembra che stia invalidando il layout.