Compartir a través de


Cómo: Manipular columnas y filas mediante ColumnDefinitionsCollections y RowDefinitionsCollections

En este ejemplo se muestra cómo usar los métodos de las clases ColumnDefinitionCollection y RowDefinitionCollection para realizar acciones como agregar, borrar o contar el contenido de filas o columnas. Por ejemplo, puede Add, Clear o Count los elementos que se incluyen en una ColumnDefinition o en una RowDefinition.

Ejemplo

En el ejemplo siguiente se crea un elemento Grid con un Namegrid1. Grid contiene un objeto StackPanel que, a su vez, contiene elementos Button, cada uno controlado por un método de colección diferente. Al hacer clic en Button, activa una llamada de método en el archivo de código subyacente.

<DockPanel Margin="10,0,0,0">

    <TextBlock FontSize="20" FontWeight="Bold" DockPanel.Dock="Top">Grid Column and Row Collections</TextBlock>
    <TextBlock DockPanel.Dock="Top">Click any of the buttons below to invoke the associated methods and properties of ColumnDefinition and RowDefinition Collections.</TextBlock>
    <Grid DockPanel.Dock="Top" HorizontalAlignment="Left" Name="grid1" ShowGridLines="true" Width="625" Height="400" Background="#b0e0e6">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
    </Grid>

    <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Width="625" DockPanel.Dock="Top">
        <Button Width="125" Click="addCol">Add Column</Button>
        <Button Width="125" Click="addRow">Add Row</Button>
        <Button Width="125" Click="clearCol">Clear All Columns</Button>
        <Button Width="125" Click="clearRow">Clear All Rows</Button>
        <Button Width="125" Click="removeCol">Remove One Column</Button>
    </StackPanel>
    <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Width="625" DockPanel.Dock="Top">
        <Button Width="125" Click="removeRow">Remove One Row</Button>
        <Button Width="125" Click="colCount">How Many Columns?</Button>
        <Button Width="125" Click="rowCount">How Many Rows?</Button>
        <Button Width="125" Click="rem5Col">Remove 5 Columns</Button>
        <Button Width="125" Click="rem5Row">Remove 5 Rows</Button>
    </StackPanel>
    <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Width="625" DockPanel.Dock="Top">
        <Button Width="125" Click="containsRow">Contains Row?</Button>
        <Button Width="125" Click="containsCol">Contains Column?</Button>
        <Button Width="125" Click="insertRowAt">Insert Row</Button>
        <Button Width="125" Click="insertColAt">Insert Column</Button>
        <Button Width="125" Click="colReadOnly">IsReadOnly?</Button>
    </StackPanel>
    <TextBlock DockPanel.Dock="Top" Name="tp1"/>
    <TextBlock DockPanel.Dock="Top" Name="tp2"/>
    <TextBlock DockPanel.Dock="Top" Name="tp3"/>
    <TextBlock DockPanel.Dock="Top" Name="tp4"/>
    <TextBlock DockPanel.Dock="Top" Name="tp5"/>
</DockPanel>

En este ejemplo se define una serie de métodos personalizados, cada uno correspondiente a un evento Click en el archivo en lenguaje XAML. Puede cambiar el número de columnas y filas de Grid de varias maneras, lo que incluye agregar o quitar filas y columnas y contar el número total de filas y columnas. Para evitar las excepciones ArgumentOutOfRangeException y ArgumentException, puede usar la funcionalidad de comprobación de errores que proporciona el método RemoveRange.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace columndefinitions_grid
{
    public partial class Window1 : Window
    {
        RowDefinition rowDef1;
        ColumnDefinition colDef1;

        private void addCol(object sender, RoutedEventArgs e)
        {
            colDef1 = new ColumnDefinition();
            grid1.ColumnDefinitions.Add(colDef1);
        }

        private void addRow(object sender, RoutedEventArgs e)
        {
            rowDef1 = new RowDefinition();
            grid1.RowDefinitions.Add(rowDef1);
        }

        private void clearCol(object sender, RoutedEventArgs e)
        {
            grid1.ColumnDefinitions.Clear();
        }

        private void clearRow(object sender, RoutedEventArgs e)
        {
            grid1.RowDefinitions.Clear();
        }

        private void removeCol(object sender, RoutedEventArgs e)
        {
            if (grid1.ColumnDefinitions.Count <= 0)
            {
                tp1.Text = "No More Columns to Remove!";
            }
            else
            {
                grid1.ColumnDefinitions.RemoveAt(0);
            }
        }

        private void removeRow(object sender, RoutedEventArgs e)
        {
            if (grid1.RowDefinitions.Count <= 0)
            {
                tp1.Text = "No More Rows to Remove!";
            }
            else
            {
                grid1.RowDefinitions.RemoveAt(0);
            }
        }

        private void colCount(object sender, RoutedEventArgs e)
        {
            tp2.Text = "The current number of Columns is: " + grid1.ColumnDefinitions.Count;
        }

        private void rowCount(object sender, RoutedEventArgs e)
        {
            tp2.Text = "The current number of Rows is: " + grid1.RowDefinitions.Count;
        }

        private void rem5Col(object sender, RoutedEventArgs e)
        {
            if (grid1.ColumnDefinitions.Count < 5)
            {
                tp1.Text = "There aren't five Columns to Remove!";
            }
            else
            {
                grid1.ColumnDefinitions.RemoveRange(0,5);
            }
        }

        private void rem5Row(object sender, RoutedEventArgs e)
        {
            if (grid1.RowDefinitions.Count < 5)
            {
                tp1.Text = "There aren't five Rows to Remove!";
            }
            else
            {
                grid1.RowDefinitions.RemoveRange(0, 5);
            }
        }

        private void containsRow(object sender, RoutedEventArgs e)
        {
            if (grid1.RowDefinitions.Contains(rowDef1))
            {
                tp2.Text = "Grid Contains RowDefinition rowDef1";
            }
            else
            {
                tp2.Text = "Grid Does Not Contain RowDefinition rowDef1";
            }
        }

        private void containsCol(object sender, RoutedEventArgs e)
        {
            if (grid1.ColumnDefinitions.Contains(colDef1))
            {
                tp3.Text = "Grid Contains ColumnDefinition colDef1";
            }
            else
            {
                tp3.Text = "Grid Does Not Contain ColumnDefinition colDef1";
            }
        }

        private void colReadOnly(object sender, RoutedEventArgs e)
        {
            tp4.Text = "RowDefinitionsCollection IsReadOnly?: " + grid1.RowDefinitions.IsReadOnly.ToString();
            tp5.Text = "ColumnDefinitionsCollection IsReadOnly?: " + grid1.ColumnDefinitions.IsReadOnly.ToString();
        }

        private void insertRowAt(object sender, RoutedEventArgs e)
        {
            rowDef1 = new RowDefinition();
            grid1.RowDefinitions.Insert(grid1.RowDefinitions.Count, rowDef1);
            tp1.Text = "RowDefinition added at index position " + grid1.RowDefinitions.IndexOf(rowDef1).ToString();
        }

        private void insertColAt(object sender, RoutedEventArgs e)
        {
            colDef1 = new ColumnDefinition();
            grid1.ColumnDefinitions.Insert(grid1.ColumnDefinitions.Count, colDef1);
            tp2.Text = "ColumnDefinition added at index position " + grid1.ColumnDefinitions.IndexOf(colDef1).ToString();
        }
    }
}
Imports System.Windows     
Imports System.Windows.Controls     
Imports System.Windows.Documents     

Namespace SDKSample

    '@ <summary>
    '@ Interaction logic for Window1.xaml
    '@ </summary>

    Partial Public Class Window1
        Inherits Window

        Dim rowDef1 As New RowDefinition
        Dim colDef1 As New ColumnDefinition

        Private Sub addCol(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Dim colDef1 As New ColumnDefinition
            grid1.ColumnDefinitions.Add(colDef1)
        End Sub

        Private Sub addRow(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Dim rowDef1 As New RowDefinition()
            grid1.RowDefinitions.Add(rowDef1)
        End Sub

        Private Sub clearCol(ByVal sender As Object, ByVal e As RoutedEventArgs)
            grid1.ColumnDefinitions.Clear()
        End Sub

        Private Sub clearRow(ByVal sender As Object, ByVal e As RoutedEventArgs)
            grid1.RowDefinitions.Clear()
        End Sub

        Private Sub removeCol(ByVal sender As Object, ByVal e As RoutedEventArgs)

            If (grid1.ColumnDefinitions.Count <= 0) Then
                tp1.Text = "No More Columns to Remove!"
            Else
                grid1.ColumnDefinitions.RemoveAt(0)
            End If
        End Sub

        Private Sub removeRow(ByVal sender As Object, ByVal e As RoutedEventArgs)
            If (grid1.RowDefinitions.Count <= 0) Then
                tp1.Text = "No More Rows to Remove!"
            Else
                grid1.RowDefinitions.RemoveAt(0)
            End If
        End Sub

        Private Sub colCount(ByVal sender As Object, ByVal e As RoutedEventArgs)
            tp2.Text = "The current number of Columns is: " + grid1.ColumnDefinitions.Count.ToString()
        End Sub

        Private Sub rowCount(ByVal sender As Object, ByVal e As RoutedEventArgs)
            tp2.Text = "The current number of Rows is: " + grid1.RowDefinitions.Count.ToString()
        End Sub

        Private Sub rem5Col(ByVal sender As Object, ByVal e As RoutedEventArgs)
            If (grid1.ColumnDefinitions.Count < 5) Then
                tp1.Text = "There aren't five Columns to Remove!"
            Else
                grid1.ColumnDefinitions.RemoveRange(0, 5)
            End If
        End Sub

        Private Sub rem5Row(ByVal sender As Object, ByVal e As RoutedEventArgs)
            If (grid1.RowDefinitions.Count < 5) Then
                tp1.Text = "There aren't five Rows to Remove!"
            Else
                grid1.RowDefinitions.RemoveRange(0, 5)
            End If
        End Sub

        Private Sub containsRow(ByVal sender As Object, ByVal e As RoutedEventArgs)
            If (grid1.RowDefinitions.Contains(rowDef1)) Then
                tp2.Text = "Grid Contains RowDefinition rowDef1"
            Else
                tp2.Text = "Grid Does Not Contain RowDefinition rowDef1"
            End If
        End Sub

        Private Sub containsCol(ByVal sender As Object, ByVal e As RoutedEventArgs)
            If (grid1.ColumnDefinitions.Contains(colDef1)) Then
                tp3.Text = "Grid Contains ColumnDefinition colDef1"
            Else
                tp3.Text = "Grid Does Not Contain ColumnDefinition colDef1"
            End If
        End Sub

        Private Sub colReadOnly(ByVal sender As Object, ByVal e As RoutedEventArgs)
            tp4.Text = "RowDefinitionsCollection IsReadOnly?: " + grid1.RowDefinitions.IsReadOnly.ToString()
            tp5.Text = "ColumnDefinitionsCollection IsReadOnly?: " + grid1.ColumnDefinitions.IsReadOnly.ToString()
        End Sub

        Private Sub insertRowAt(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Dim rowDef1 As New RowDefinition
            grid1.RowDefinitions.Insert(grid1.RowDefinitions.Count, rowDef1)
            tp1.Text = "RowDefinition added at index position " + grid1.RowDefinitions.IndexOf(rowDef1).ToString()
        End Sub

        Private Sub insertColAt(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Dim colDef1 As New ColumnDefinition()
            grid1.ColumnDefinitions.Insert(grid1.ColumnDefinitions.Count, colDef1)
            tp2.Text = "ColumnDefinition added at index position " + grid1.ColumnDefinitions.IndexOf(colDef1).ToString()
        End Sub


    End Class
End Namespace

Vea también