Comment : modifier la propriété Margin
Mise à jour : novembre 2007
Cet exemple montre comment modifier la propriété Margin d'un élément enfant se trouvant dans une Grid. L'exemple représente des valeurs de positionnement sous forme de contenu dans un ListBoxItem. Les valeurs sont converties ultérieurement en instances de Thickness, une valeur requise pour Margin. La valeur est ensuite reconvertie en chaîne et affichée en TextBlock.
Exemple
L'exemple suivant crée un élément ListBox qui possède dix éléments à 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 la méthode personnalisée ChangeMargin. Cette méthode passe le ListBoxItem à un objet ThicknessConverter qui convertit le ContentListBoxItem en une instance de Thickness. (notez que cette valeur a déjà été convertie en chaîne à l'aide de la méthode ToString). Cette valeur est ensuite retournée comme Margin de l'objet text1, en modifiant dynamiquement sa position.
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 : convertir un ListBoxItem en un nouveau type de données
Comment : utiliser un objet ThicknessConverter