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 :

Difficile d'être plus précis

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 !