如何以编程方式设置网格行和列位置

我有一个Stackpanel内的两个网格。 第一个网格被命名为GridX。 最初在网格内有一个二维的文本框(RowDefs / ColumnDefs)数组。 XAML中的TextBox定义是

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

我想在与GridX相同的位置编程添加一个TextBlock

影响必须是这样的

 <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); 

或者对所有者types的属性调用静态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);