A découvrir d'urgence : Ekioo, le blog de ma société

jeudi 18 décembre 2008

AG_E_UNKNOWN_ERROR avec Silverlight

AG_E_UNKNOWN_ERROR [Line: 7 Position: 34]

Voici une bien drôle d'erreur qui a surgit dans un de mes projets en SilverLight. Après avoir fait de nombreuses recherches, il reste difficile à déterminer pourquoi survient cette erreur.

Voici une liste non-exhaustive des symptomes observés :
- La compilation se déroule sans problème
- Tant qu'on affiche pas l'aperçut graphique il n'y a aucun message d'erreur
- L'aperçut graphique d'un l'UserControl qui en contient un autre que vous avez créé est altéré et inutilisable
- Ne pas imbriquer les UserControl fait disparaitre le problème
- Ne pas utiliser de style definit dans App.xaml dans l'UserControl enfant fait disparaitre le problème
- Le message AG_E_UNKNOWN_ERROR indique une ligne où rien ne semble anormal
- Lorsqu'on lance l'application, tout se déroule sans problème


Il s'agit clairement d'une gène lorsqu'on effectue le design de son application avec visual studio 2008. Bien sur, il est toujours possible de faire avec et de valider son travail lors de l'execution, mais cela reste vraiment contraignant. De plus, le message d'erreur en lui même n'est pas du tout explicite et j'adresse par avance tout mes remerciements à celui qui me trouveras une note constructive à ce sujet dans la msdn.

Voici un récapitulatif non exhaustif des causes de ce message :
- Vous essayé d'insérer un UserControl que vous avez créé dans un autre UserControl
- L'UserControl inséré ne possède pas de constructeur publique
- Vous avez entrer du code dans le constructeur de L'UserControl inséré
- L'UserControl inséré utilise des styles en StaticResource déclaré dans App.xaml
- Il y a des erreurs ou des doublons dans les styles d'App.xaml

Des causes un peu différentes à mon avis peuvent également provoquer le message, en rapport avec les media elements ou avec le passage de la version 1.1 à 2.0 du framework. Si le message est le même, je ne pense résolument pas qu'il exprime le même problème.

A l'heure actuelle, je n'est pas encore trouvée de solution qui permette de corriger cette erreur. Espérons que l'équipe de développement de SilverLight ou de Visual Studio soit à l'écoute et nous publie un correctifs prochainement !

dimanche 14 décembre 2008

Binding en Silverlight 2.0

Avec WPF, Microsoft à introduit une nouvelle façon de lier des données aux contrôler par la syntaxe {Binding}. Cette syntaxe est très légère et incroyablement efficace lorsqu'on sait s'en servir. Vous pouvez consulter DataBinding Quick Reference pour faire un tour d'horizon de cette syntaxe.

Silverlight lui aussi permet de faire du binding de cette façon, mais de façon plus limité. Par exemple, le très utile ElementName, qui permet de cibler un autre contrôle par son nom, n'est pas disponible. En WPF, il suffit de faire comme le décrit Pascal Cabanel sur son blog.

Pourtant, avec Silverlight, c'est un peu plus complexe. La façon la plus simple est de passer par des évènements et de mettre à jour les DataContexte de chaque contrôle à chaque changement. Ca marche très bien, surtout si l'application n'est pas très complexe.

La solution qui est recommandée par Microsoft, je l'ai trouvé sur un ce webcast. Il faut créer une classe intermédiaire qui implémente INotifyPropertyChanged, un Controller, et qui va faire le lien entre tous les contrôles et sur lequel va reposer tout notre binding.