2010-08-03 21 views
6

Wir haben ein sehr großes Projekt. Das Visual Studio-Debug-Ausgabeprotokoll enthält mehrere sich wiederholende WPF-Bindungsfehler. Zum Beispiel:
Wie WPF Bindungsfehler suchen?

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')

Die Linien gedruckt werden, wenn eine Aktion ausgeführt wird. Dies ist jedoch eine sehr schwere Operation, in der Dutzende von WPF-Klassen beteiligt sind.

Gibt es eine schnelle Möglichkeit, die genaue Quelle des Bindungsfehlers zu finden? Irgendein Werkzeug, das helfen könnte?

Antwort

5

Der Fehler, den Sie sehen, liegt daran, dass die MaxWidth eines Steuerelements an die Width eines anderen Steuerelements gebunden ist. MaxWidth muss einen bestimmten numerischen Wert haben, aber Width kann mehrere nicht bestimmte Werte haben, abhängig vom verwendeten Layout. In diesem Fall beträgt die Breite des Quellsteuerelements NaN. Dies ist ein ungültiger Wert für MaxWidth. Das verursacht den Fehler.

Also, ich würde nach einer Bindung für ein Steuerelement suchen, wo Sie MaxWidth="{Binding Width, ElementName=someElement}" oder ähnliches einstellen.

Bei einer Vermutung, dass die Bindung an Ort und Stelle gebracht wurde, weil eine Steuerung innerhalb eines Layoutfeldes wie ein StackPanel enthalten ist, die nicht die Größe seiner Kinder nicht einschränken, und jemand versucht, MaxWidth zu binden mit Clipping-Problemen zu behandeln. Eine bessere Lösung besteht darin, zu einem Panel-Steuerelement zu wechseln, das seine Inhaltsgröße einschränkt.

Die Operation, die ausgeführt wird, hat wahrscheinlich in diesem Fall nichts mit dem Fehler zu tun, außer dass das Layout ungültig zu sein scheint.