2010-08-03 2 views
6

Nous avons un très gros projet. Le journal de sortie de débogage Visual Studio contient plusieurs erreurs de liaison WPF répétitives. Par exemple:
Comment rechercher les erreurs de liaison 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')

Les lignes sont imprimées lorsqu'une action est effectuée. Cependant, il s'agit d'une opération très lourde, dans laquelle des dizaines de classes WPF sont impliquées.

Existe-t-il un moyen rapide de trouver la source exacte de l'erreur de liaison? Un outil qui pourrait aider?

Répondre

5

L'erreur que vous voyez est parce que le MaxWidth d'un contrôle est lié au Width d'un autre contrôle. MaxWidth doit avoir une valeur numérique définie, mais Width peut avoir plusieurs valeurs non définies, en fonction de la disposition utilisée. Dans ce cas, la largeur du contrôle de source est NaN - ce qui est une valeur non valide pour MaxWidth. Cela provoque l'erreur. Donc, je voudrais une liaison sur un contrôle où vous définissez MaxWidth="{Binding Width, ElementName=someElement}", ou similaire.

A une supposition, que la liaison a été mis en place parce qu'un contrôle est contenu dans un panneau de mise en page comme un StackPanel qui ne limite pas la taille de ses enfants, et que quelqu'un a essayé de lier MaxWidth pour traiter des questions de découpage. Une meilleure solution consiste à passer à un contrôle de panneau qui limite la taille de son contenu.

L'opération en cours n'est probablement pas liée à l'erreur dans ce cas, sauf qu'elle semble invalider votre mise en page.