107 votes

Comment définir la position des lignes et des colonnes de la grille de manière programmatique ?

J'ai deux grilles à l'intérieur d'un Stackpanel. La première grille s'appelle GridX. Initialement, à l'intérieur de la grille, il y a un tableau 2D de boîtes de texte (RowDefs/ColumnDefs). La définition de la TextBox en XAML est la suivante

<TextBox x:Name="A1" Grid.Row="4" Grid.Column="5" TextAlignment="Center" />

Je souhaite ajouter un Bloc de texte de manière programmatique dans la même position que dans le cadre de GridX.

L'effet doit être le suivant

<TextBlock Grid.Row="4" Grid.Column="5"
HorizontalAlignment="Left" VerticalAlignment="Top" Text="10" FontSize="8"/>

Comment l'ajouter. J'ai essayé ceci :

TextBlock tblock = new TextBlock();
GridX.SetColumn(tblock, cIndex);
GridX.SetRow(tblock, rIndex);

Mais il a échoué.

J'ai de nouveau essayé :

int rIndex = Grid.GetRow(txtBox);
int cIndex = Grid.GetColumn(txtBox);                               

TextBlock tblock = new TextBlock();
tblock.VerticalAlignment = VerticalAlignment.Top;
tblock.HorizontalAlignment = HorizontalAlignment.Left;
tblock.FontSize = 8;
tblock.Text = rc[i, j - 1];

Grid.SetColumn(tblock, cIndex);
Grid.SetRow(tblock, rIndex);

txtBox.MaxLength = 1;    

Le problème est que le bloc de texte n'est pas visible. TextBox le cache. Je vous remercie de votre aide.

197voto

John Bowen Points 14985

Pour les propriétés attachées, vous pouvez appeler SetValue sur l'objet auquel vous souhaitez attribuer une valeur :

tblock.SetValue(Grid.RowProperty, 4);

Ou appelez la méthode statique Set (et non une méthode d'instance comme vous avez essayé) pour la propriété sur le type propriétaire, dans ce cas SetRow :

Grid.SetRow(tblock, 4);

36voto

Dave Points 569

Voici un exemple qui pourrait aider quelqu'un :

Grid test = new Grid();
test.ColumnDefinitions.Add(new ColumnDefinition());
test.ColumnDefinitions.Add(new ColumnDefinition());
test.RowDefinitions.Add(new RowDefinition());
test.RowDefinitions.Add(new RowDefinition());
test.RowDefinitions.Add(new RowDefinition());

Label t1 = new Label();
t1.Content = "Test1";
Label t2 = new Label();
t2.Content = "Test2";
Label t3 = new Label();
t3.Content = "Test3";
Label t4 = new Label();
t4.Content = "Test4";
Label t5 = new Label();
t5.Content = "Test5";
Label t6 = new Label();
t6.Content = "Test6";

Grid.SetColumn(t1, 0);
Grid.SetRow(t1, 0);
test.Children.Add(t1);

Grid.SetColumn(t2, 1);
Grid.SetRow(t2, 0);
test.Children.Add(t2);

Grid.SetColumn(t3, 0);
Grid.SetRow(t3, 1);
test.Children.Add(t3);

Grid.SetColumn(t4, 1);
Grid.SetRow(t4, 1);
test.Children.Add(t4);

Grid.SetColumn(t5, 0);
Grid.SetRow(t5, 2);
test.Children.Add(t5);

Grid.SetColumn(t6, 1);
Grid.SetRow(t6, 2);
test.Children.Add(t6);

3voto

KobCoder Points 46
for (int i = 0; i < 6; i++)
{
    test.ColumnDefinitions.Add(new ColumnDefinition());

    Label t1 = new Label();
    t1.Content = "Test" + i;

    Grid.SetColumn(t1, i);
    Grid.SetRow(t1, 0);
    test.Children.Add(t1);
}

2voto

Kenlly Acosta Points 171

Essayez ceci :

                Grid grid = new Grid(); //Define the grid
                for (int i = 0; i < 36; i++) //Add 36 rows
                {
                    ColumnDefinition columna = new ColumnDefinition()
                    {
                        Name = "Col_" + i,
                        Width = new GridLength(32.5),
                    };
                    grid.ColumnDefinitions.Add(columna);
                }

                for (int i = 0; i < 36; i++) //Add 36 columns
                {
                    RowDefinition row = new RowDefinition();
                    row.Height = new GridLength(40, GridUnitType.Pixel);
                    grid.RowDefinitions.Add(row);
                }

                for (int i = 0; i < 36; i++)
                {
                    for (int j = 0; j < 36; j++)
                    {
                        Label t1 = new Label()
                        {
                            FontSize = 10,
                            FontFamily = new FontFamily("consolas"),
                            FontWeight = FontWeights.SemiBold,
                            BorderBrush = Brushes.LightGray,
                            BorderThickness = new Thickness(2),
                            HorizontalContentAlignment = HorizontalAlignment.Center,
                            VerticalContentAlignment = VerticalAlignment.Center,
                        };
                        Grid.SetRow(t1, i);
                        Grid.SetColumn(t1, j);
                        grid.Children.Add(t1); //Add the Label Control to the Grid created
                    }
                }

0voto

Nir Points 18250

Vous devez ajouter le bloc de texte à la grille.

GridX.Children.Add(tblock);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X