У меня есть две сетки внутри Stackpanel. Первая сетка называется GridX. Изначально внутри сетки находится 2D-массив текстовых полей (RowDefs / ColumnDefs). Определение TextBox в XAML:
<TextBox x:Name="A1" Grid.Row="4" Grid.Column="5" TextAlignment="Center" />
Я хочу программно добавить TextBlock в ту же позицию, что и часть GridX.
Эффект должен быть таким
<TextBlock Grid.Row="4" Grid.Column="5"
HorizontalAlignment="Left" VerticalAlignment="Top" Text="10" FontSize="8"/>
Как это добавить. Я пробовал это:
TextBlock tblock = new TextBlock();
GridX.SetColumn(tblock, cIndex);
GridX.SetRow(tblock, rIndex);
Но не удалось.
Я снова попробовал это:
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;
Теперь проблема в том, что TextBlock не отображается. TextBox скрывает это. Я ценю вашу помощь.
Ответы:
Для прикрепленных свойств вы можете вызвать SetValue для объекта, для которого вы хотите присвоить значение:
tblock.SetValue(Grid.RowProperty, 4);
Или вызовите статический метод Set (не как метод экземпляра, как вы пробовали) для свойства типа владельца, в данном случае SetRow:
Grid.SetRow(tblock, 4);
источник
Вот пример, который может кому-то помочь:
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);
источник
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); }
источник
Попробуй это:
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 } }
источник