Procedura: modificare colonne e righe utilizzando ColumnDefinitionsCollection e RowDefinitionsCollection
In questo esempio viene illustrato come utilizzare i metodi nelle classi ColumnDefinitionCollection e RowDefinitionCollection per eseguire azioni come l'aggiunta, la cancellazione, o il conteggio del contenuto di righe o colonne. Ad esempio, è possibile applicare il metodo Add, Clear o Count agli elementi inclusi in un oggetto ColumnDefinition o RowDefinition.
Esempio
Nell'esempio seguente viene creato un elemento Grid con una proprietà Name impostata su grid1. L'oggetto Grid contiene un oggetto StackPanel che include elementi Button, ognuno controllato da un metodo di insieme diverso. Quando si fa clic su un elemento Button, viene attivata una chiamata a un metodo nel file code-behind.
<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>
In questo esempio viene definita una serie di metodi personalizzati, ognuno corrispondente a un evento Click nel file Extensible Application Markup Language (XAML). È possibile modificare il numero di colonne e righe nell'oggetto Grid in diversi modi, ad esempio aggiungendo o rimuovendo righe e colonne nonché conteggiando il numero totale di righe e colonne. Per evitare eccezioni ArgumentOutOfRangeException e ArgumentException, è possibile utilizzare la funzionalità di controllo errori fornita dal metodo RemoveRange.
Imports System
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
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();
}
}
}