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

Vin*_*nod 79 wpf gridview

我在Stackpanel里面有两个网格.第一个网格名为GridX.最初在网格内部有一个文本框的2D数组(RowDefs/ColumnDefs).XAML中的TextBox定义是

<TextBox x:Name="A1" Grid.Row="4" Grid.Column="5" TextAlignment="Center" />
Run Code Online (Sandbox Code Playgroud)

我希望以与GridX的一部分相同的位置以编程方式添加TextBlock.

效果必须是这样的

<TextBlock Grid.Row="4" Grid.Column="5"
HorizontalAlignment="Left" VerticalAlignment="Top" Text="10" FontSize="8"/>
Run Code Online (Sandbox Code Playgroud)

如何添加这个.我试过这个:

TextBlock tblock = new TextBlock();
GridX.SetColumn(tblock, cIndex);
GridX.SetRow(tblock, rIndex);
Run Code Online (Sandbox Code Playgroud)

但失败了.

我再试一次:

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;    
Run Code Online (Sandbox Code Playgroud)

现在问题是TextBlock不可见.TextBox隐藏它.你能帮我吗

Joh*_*wen 143

对于附加属性,您可以在要为其分配值的对象上调用SetValue:

tblock.SetValue(Grid.RowProperty, 4);
Run Code Online (Sandbox Code Playgroud)

或者为所有者类型的属性调用静态Set方法(而不是像您尝试的实例方法),在本例中为SetRow:

Grid.SetRow(tblock, 4);
Run Code Online (Sandbox Code Playgroud)


Dav*_*ave 26

这是一个可能有助于某人的例子:

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);
Run Code Online (Sandbox Code Playgroud)