Compartir a través de


Cómo: Convertir un elemento ListBoxItem en un nuevo tipo de datos

Actualización: noviembre 2007

En este ejemplo se muestra cómo convertir el contenido de un objeto ListBoxItem en una instancia de Thickness. Aunque en este ejemplo se muestra específicamente cómo convertir un objeto ListBoxItem en una instancia de Thickness, también muestra cómo utilizar cualquier convertidor de tipos compatible para convertir un objeto ListBoxItem.

Ejemplo

En el ejemplo siguiente se crea un elemento ListBox que tiene diez objetos ListBoxItem seleccionables. El evento SelectionChanged desencadena el método personalizado ChangeMargin, que se define en el ejemplo de código subsiguiente.

En el ejemplo de código de Lenguaje de marcado de aplicaciones extensible (XAML), cada elemento ListBoxItem representa un valor de Thickness, que se utiliza para describir los márgenes uniformes de un elemento. Sin embargo, para poder utilizar una clase ListBoxItem que represente una instancia de Thickness, debe convertirla primero al tipo de datos correcto. En el ejemplo de código subsiguiente se muestra la conversión.

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

Cuando un usuario cambia la selección de ListBox, el cambio invoca el controlador de eventos ChangeMargin. Este método pasa ListBoxItem a un objeto ThicknessConverter, que convierte la propiedad Content del objeto ListBoxItem en una instancia de Thickness. (Observe que el valor de Content ya se ha convertido en una cadena mediante el método ToString.) A continuación, el valor se establece en la propiedad Margin del 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 +".";
        }

Para obtener el ejemplo completo, vea Ejemplo Changing Margins in a Grid.

Vea también

Tareas

Cómo: Cambiar la propiedad Margin

Cómo: Utilizar un objeto ThicknessConverter

Referencia

ListBox

ListBoxItem

ThicknessConverter