Comment : convertir un ListBoxItem en un nouveau type de données
Mise à jour : novembre 2007
Cet exemple montre comment convertir le contenu d'un ListBoxItem en une instance de Thickness. Bien que cet exemple indique spécifiquement comment convertir un ListBoxItem en une instance d'épaisseur (Thickness), il montre également comment utiliser tout convertisseur de type compatible pour convertir un ListBoxItem.
Exemple
L'exemple suivant crée un élément ListBox qui possède dix objets ListBoxItem à sélectionner. L'événement SelectionChanged déclenche la méthode personnalisée ChangeMargin, définie par l'exemple de code suivant.
Dans l'exemple XAML (Extensible Application Markup Language), chaque ListBoxItem représente une valeur Thickness utilisée pour décrire les marges uniformes d'un élément. Toutefois, avant de pouvoir utiliser un ListBoxItem pour représenter une instance de Thickness, vous devez tout d'abord le convertir en un type de données correct. L'exemple de code suivant affiche la conversion.
<ListBox Grid.Row="0" Grid.Column="1"
Width="50" Height="50"
VerticalAlignment="Top"
SelectionChanged="ChangeMargin">
<ListBoxItem>10</ListBoxItem>
<ListBoxItem>20</ListBoxItem>
<ListBoxItem>30</ListBoxItem>
<ListBoxItem>40</ListBoxItem>
<ListBoxItem>50</ListBoxItem>
<ListBoxItem>60</ListBoxItem>
<ListBoxItem>70</ListBoxItem>
<ListBoxItem>80</ListBoxItem>
<ListBoxItem>90</ListBoxItem>
<ListBoxItem>100</ListBoxItem>
</ListBox>
Lorsqu'un utilisateur modifie la sélection ListBox, la modification appelle le gestionnaire d'événements ChangeMargin. Cette méthode passe le ListBoxItem à un objet ThicknessConverter qui convertit la propriété de l'Content d'un ListBoxItem en une instance de Thickness. (Notez que la valeur de Content a déjà été convertie en chaîne à l'aide de la méthode ToString). Cette valeur est affectée à la Margin de l'objet text1.
Private Sub ChangeMargin(ByVal sender As Object, ByVal args As SelectionChangedEventArgs)
Dim li As ListBoxItem = CType(CType(sender, ListBox).SelectedItem, ListBoxItem)
Dim myThicknessConverter As ThicknessConverter = New ThicknessConverter()
Dim th1 As Thickness = CType(myThicknessConverter.ConvertFromString(li.Content.ToString()), Thickness)
text1.Margin = th1
Dim st1 As String = CType(myThicknessConverter.ConvertToString(text1.Margin), String)
gridVal.Text = "The Margin property is set to " + st1 + "."
End Sub
private void ChangeMargin(object sender, SelectionChangedEventArgs args)
{
ListBoxItem li = ((sender as ListBox).SelectedItem as ListBoxItem);
ThicknessConverter myThicknessConverter = new ThicknessConverter();
Thickness th1 = (Thickness)myThicknessConverter.ConvertFromString(li.Content.ToString());
text1.Margin = th1;
String st1 = (String)myThicknessConverter.ConvertToString(text1.Margin);
gridVal.Text = "The Margin property is set to " + st1 +".";
}
Pour l'exemple complet, consultez Modification des marges dans une grille, exemple.
Voir aussi
Tâches
Comment : modifier la propriété Margin
Comment : utiliser un objet ThicknessConverter