Compartir a través de


Cómo: Cambiar la propiedad Margin

Actualización: noviembre 2007

En este ejemplo se muestra cómo cambiar la propiedad Margin de un elemento secundario que está en un control Grid. En el ejemplo se representan los valores de posición como contenido de un control ListBoxItem. Posteriormente, los valores se convierten en instancias de Thickness, que es un valor necesario para Margin. A continuación, el valor se vuelve a convertir en una cadena y se muestra como un control TextBlock.

Ejemplo

En el ejemplo siguiente se crea un elemento ListBox que tiene diez elementos 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), 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 método personalizado ChangeMargin. Este método pasa ListBoxItem a un objeto ThicknessConverter, que convierte la propiedad Content de ListBoxItem en una instancia de Thickness. (Observe que este valor ya se ha convertido en una cadena mediante el método ToString.) A continuación, este valor se vuelve a pasar como Margin del objeto text1, con lo que se cambia dinámicamente su posición.

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: Convertir un elemento ListBoxItem en un nuevo tipo de datos

Cómo: Utilizar un objeto ThicknessConverter

Referencia

Grid

ThicknessConverter

Margin

ListBox