J’ai eu une erreur dans un de mes projets WP7 lors du passage au SDK 7.1 (Mango), sur un code qui fonctionnait très bien avec le SDK 7.0, avec un message d’erreur très précis, comme on les aime :
Evidemment, pas moyen de trouver la moindre personne sur le net ayant déjà rencontré (et corrigé) l’erreur (quelqu’un a finalement posé la question sur StackOverflow ce week-end, ayant déjà trouvé la réponse entre temps j’espère lui avoir été utile).
J’ai donc investigué pour trouver l’origine de ce bug, qui venait d’une Listbox, dont les templates des items avaient été redéfinis :
<ListBox x:Name="lstUsers">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ContentControl x:Name="ContentContainer"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Foreground="{TemplateBinding Foreground}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
La solution : il faut définir la propriété TargetType sur le ControlTemplate :
<ControlTemplate TargetType="ListBoxItem">
<ListBox x:Name="lstUsers">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<ContentControl x:Name="ContentContainer"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Foreground="{TemplateBinding Foreground}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Maintenant ça fonctionne aussi bien avec l’ancien qu’avec le nouveau SDK :)
2 commentaires:
Et oui, si tu l'avais fait un Silverlight ou WPF, tu aurais vu plus tôt que tu avais oublié de specifier le targettype sur ton controletemplate ! :)
En principe c'est obligatoire, mais manifestement ce n'etait pas bien "vérifié" ds les versions précédentes du sdk...?
Rahhhhhhhhhhhhhhhhhhhhhh !!!!! J'avais ce bug avec un control de codeplex ... et j'ai pu le corriger !!!!
Merci beaucoup l'ami :)
Enregistrer un commentaire