Как программно задавать позиции строк и столбцов сетки
У меня есть две решетки внутри стакана. Первая сетка называется 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 скрывает это. Я ценю вашу помощь.
Ответы
Ответ 1
Для подключенных свойств вы можете вызвать SetValue для объекта, для которого вы хотите присвоить значение:
tblock.SetValue(Grid.RowProperty, 4);
Или вызовите статический метод Set (не как метод экземпляра, как вы пытались) для свойства типа владельца, в этом случае SetRow:
Grid.SetRow(tblock, 4);
Ответ 2
Вот пример, который может кому-то помочь:
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);
Ответ 3
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);
}