Como: Change the Margin Property
Esse exemplo mostra como modificar a propriedade Margin do elemento filho que está num Grid. O exemplo representa os valores de posicionamento como conteúdo em um ListBoxItem. Os valores depois são convertidos em instâncias de Thickness, que é um valor requerido para Margin. O valor então é convertido de volta para um string e exibido como umTextBlock.
Exemplo
O exemplo a seguir cria um elemento ListBox que possui dez objetos selecionáveis. O evento SelectionChanged dispara o método personalizado ChangeMargin, que o código de exemplo a seguir define.
No exemplo de Extensible Application Markup Language (XAML), cada ListBoxItem representa um valor Thickness, que é utilizado para descrever margens uniformes de um elemento. Entretanto, antes que você possa utilizar um ListBoxItem para representar uma instância de Thickness, você deve primeiro convertê-lo para o tipo de dado correto. O código de exemplo a seguir mostra a conversão.
<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>
Quando um usuário modifica a seleção ListBox, a mudança invoca o método personalizado ChangeMargin. Esse método passa o ListBoxItem para um objeto ThicknessConverter, que converte a propriedade ListBoxItem do Content para uma instância do Thickness. (Observe que o valor já foi convertido em um string utilizando o método ToString.) Esse valor é passado então de volta como um Margin do objeto text1, mudando sua posição dinamicamente.
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 +".";
}
For the complete sample, see Alterar margens em um exemplo de grade.
Consulte também
Tarefas
Como: Convert a ListBoxItem to a New Data Type
Como: Usar um Objeto ThicknessConverter