Comment : obtenir ou définir des propriétés de positionnement de la zone de dessin
Mise à jour : novembre 2007
Cet exemple montre comment utiliser les méthodes de positionnement de l'élément Canvas pour positionner le contenu enfant. Cet exemple utilise le contenu d'un ListBoxItem pour représenter des valeurs de positionnement et convertit les valeurs en instances de Double, un argument requis pour le positionnement. Les valeurs sont ensuite reconverties en chaînes et affichées sous forme de texte dans un élément TextBlock à l'aide de la méthode GetLeft.
Exemple
L'exemple suivant crée un élément ListBox contenant onze éléments ListBoxItem sélectionnables. L'événement SelectionChanged déclenche la méthode personnalisée ChangeLeft, définie par le bloc de code suivant.
Chaque ListBoxItem représente une valeur Double qui est l'un des arguments que la méthode SetLeft de Canvas accepte. Pour utiliser un ListBoxItem afin de représenter une instance de Double, vous devez d'abord convertir ListBoxItem en type de données correct.
<ListBox Grid.Column="1" Grid.Row="1" VerticalAlignment="Top" Width="60" Margin="10,0,0,0" SelectionChanged="ChangeLeft">
<ListBoxItem>Auto</ListBoxItem>
<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>
<ListBox Grid.Column="1" Grid.Row="1" VerticalAlignment="Top" Width="60" Margin="10,0,0,0" SelectionChanged="ChangeLeft">
<ListBoxItem>Auto</ListBoxItem>
<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 méthode personnalisée ChangeLeft est appelée. Cette méthode passe le ListBoxItem à un objet LengthConverter qui convertit le Content d'un ListBoxItem en une instance de Double (notez que cette valeur a déjà été convertie en String à l'aide de la méthode ToString). Cette valeur est ensuite repassée aux méthodes SetLeft et GetLeft de Canvas pour modifier la position de l'objet text1.
Private Sub ChangeLeft(ByVal sender As Object, ByVal e As SelectionChangedEventArgs)
Dim li As ListBoxItem = CType(CType(sender, ListBox).SelectedItem, ListBoxItem)
Dim myLengthConverter As New LengthConverter
Dim db1 As Double = CType(myLengthConverter.ConvertFromString(li.Content.ToString()), Double)
Canvas.SetLeft(text1, db1)
Dim st1 As String = CType(myLengthConverter.ConvertToString(Canvas.GetLeft(text1)), String)
canvasLeft.Text = "Canvas.Left = " + st1
End Sub
private void ChangeLeft(object sender, SelectionChangedEventArgs args)
{
ListBoxItem li = ((sender as ListBox).SelectedItem as ListBoxItem);
LengthConverter myLengthConverter = new LengthConverter();
Double db1 = (Double)myLengthConverter.ConvertFromString(li.Content.ToString());
Canvas.SetLeft(text1, db1);
String st1 = (String)myLengthConverter.ConvertToString(Canvas.GetLeft(text1));
canvasLeft.Text = "Canvas.Left = " + st1;
}
Pour l'exemple complet, consultez Propriétés de positionnement de la zone de dessin, exemple.