Partilhar via


Como: Get or Set Canvas Positioning Properties

Este exemplo mostra como usar os métodos de posicionamento do elemento Canvas para posicionar conteúdo filho. Este exemplo usa conteúdo em um ListBoxItem para representar valores de posicionamento e converte os valores em instâncias de Double, o qual é um argumento requerido para posicionamento. Os valores são então convertidos de volta em sequências de caracteres e exibidos como texto em um elemento TextBlock usando o método GetLeft.

Exemplo

O exemplo a seguir cria um elemento ListBox que tem onze elementos ListBoxItem selecionáveis. O evento SelectionChanged aciona o método ChangeLeft personalizado que o bloco de código subsequente define.

Cada ListBoxItem representa um valor de Double, que é um dos argumentos que o método SetLeft de Canvas aceita. Para poder usar um ListBoxItem para representar uma instância de Double, você deve primeiro converter o ListBoxItem para o tipo de dados correto.

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

Quando um usuário altera a seleção da ListBox, ele chama o método ChangeLeft personalizado. Este método passa a ListBoxItem para um objeto LengthConverter, que converte o Content de um ListBoxItem para uma instância de Double (observe que esse valor já foi convertido em um String usando o método ToString). Este valor é então passado de volta para os métodos SetLeft e GetLeft do Canvas para mudar a posição do objeto 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;
        }

For the complete sample, see Exemplo de propriedades de posicionamento da tela.

Consulte também

Conceitos

Panels Overview

Referência

Canvas

ListBoxItem

LengthConverter