Condividi tramite


Procedura: Ottenere o impostare le proprietà di posizionamento del Canvas.

In questo esempio viene illustrato come utilizzare i metodi di posizionamento dell'elemento Canvas per posizionare il contenuto dei figli. Questo esempio utilizza il contenuto di un ListBoxItem per rappresentare i valori di posizionamento e converte i valori in istanze di Double, il quale è un argomento richiesto per il posizionamento. I valori vengono quindi convertiti nuovamente in stringhe e visualizzati come testo in un elemento TextBlock usando il metodo GetLeft.

Esempio

Nell'esempio seguente viene creato un elemento ListBox con undici elementi selezionabili ListBoxItem. L'evento SelectionChanged attiva il metodo personalizzato ChangeLeft, definito dal blocco di codice successivo.

Ogni ListBoxItem rappresenta un valore di Double, ovvero uno degli argomenti accettati dal metodo SetLeft di Canvas. Per usare un ListBoxItem per rappresentare un'istanza di Double, è prima necessario convertire il ListBoxItem nel tipo di dati corretto.

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

Quando un utente modifica la selezione ListBox, richiama il metodo personalizzato ChangeLeft. Questo metodo passa il ListBoxItem a un oggetto LengthConverter, che converte il Content di un ListBoxItem in un'istanza di Double (si noti che questo valore è già stato convertito in un String utilizzando il metodo ToString). Questo valore viene quindi passato di nuovo ai metodi SetLeft e GetLeft di Canvas per modificare la posizione dell'oggetto text1.

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

Vedere anche