Como: Convert a ListBoxItem to a New Data Type
Este exemplo mostra como converter o conteúdo de um ListBoxItem para uma instância de Thickness. Embora esse exemplo mostre especificamente como converter um ListBoxItem em uma instância de Thickness, também mostra como você pode utilizar qualquer conversor de tipo compatível para converter um ListBoxItem.
Exemplo
O exemplo a seguir cria um elemento ListBox que possui dez objetos ListBoxItem 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 manipulador de evento ChangeMargin. Esse método passa o ListBoxItem para um objeto ThicknessConverter, que converte a propriedade Content do ListBoxItem para uma instancia do Thickness. (Observe que o valor de Content já foi convertido a um string utilizando o método ToString.) O valor então é definido como Margin do objeto text1.
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: Change the Margin Property
Como: Usar um Objeto ThicknessConverter