Freigeben über


So geht's: Positionierungseigenschaften der Leinwand abrufen oder festlegen

In diesem Beispiel wird gezeigt, wie Sie die Positionierungsmethoden des Elements Canvas verwenden, um untergeordnete Inhalte zu positionieren. In diesem Beispiel wird Inhalt in einem ListBoxItem verwendet, um Positionierungswerte darzustellen und die Werte in Instanzen von Doubleumzuwandeln, welche ein erforderliches Argument für die Positionierung darstellen. Die Werte werden dann mithilfe der GetLeft-Methode wieder in Zeichenfolgen konvertiert und als Text in einem TextBlock-Element angezeigt.

Beispiel

Im folgenden Beispiel wird ein ListBox-Element erstellt, das elf auswählbare ListBoxItem-Elemente enthält. Das SelectionChanged-Ereignis löst die ChangeLeft benutzerdefinierte Methode aus, die der nachfolgende Codeblock definiert.

Jede ListBoxItem stellt einen Double Wert dar, der eines der Argumente ist, die die SetLeft Methode von Canvas akzeptiert. Um eine ListBoxItem für die Darstellung einer Instanz von Doublezu verwenden, müssen Sie zuerst die ListBoxItem in den richtigen Datentyp konvertieren.

<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>

Wenn ein Benutzer die Auswahl ListBox ändert, wird die benutzerdefinierte Methode ChangeLeft aufgerufen. Diese Methode übergibt die ListBoxItem an ein LengthConverter-Objekt, das die Content eines ListBoxItem in eine Instanz von Double konvertiert (beachten Sie, dass dieser Wert bereits mithilfe der ToString-Methode in eine String konvertiert wurde). Dieser Wert wird dann zurück an die SetLeft und GetLeft Methoden von Canvas übergeben, um die Position des text1-Objekts zu ändern.

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;
}
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

Siehe auch