Cách đặt vị trí hàng và cột trong lưới theo chương trình


89

Tôi có hai Grids bên trong một Stackpanel. Lưới đầu tiên được đặt tên là GridX. Ban đầu, bên trong lưới, có một mảng 2D các Hộp văn bản (RowDefs / ColumnDefs). Định nghĩa TextBox trong XAML là

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

Tôi muốn thêm TextBlock theo chương trình ở cùng vị trí như một phần của GridX.

Hiệu ứng phải như thế này

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

Làm thế nào để thêm điều này. Tôi đã thử điều này:

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

Nhưng không thành công.

Một lần nữa tôi đã thử điều này:

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;    

Bây giờ vấn đề là TextBlock không hiển thị. TextBox ẩn nó. Tôi đánh giá cao sự giúp đỡ của bạn.


Mã có updated.Now vấn đề là tầm nhìn của TextBlock
Vinod

Câu trả lời:


158

Đối với các thuộc tính được đính kèm, bạn có thể gọi SetValue trên đối tượng mà bạn muốn gán giá trị:

tblock.SetValue(Grid.RowProperty, 4);

Hoặc gọi phương thức Set tĩnh (không phải là phương thức thể hiện như bạn đã thử) cho thuộc tính thuộc loại chủ sở hữu, trong trường hợp này là SetRow:

Grid.SetRow(tblock, 4);

SetRow làm việc trong khi SetValue không: nó đã để lại hàng như là (zero trong trường hợp của tôi)
Anton Tropashko

1
Bạn cần đảm bảo rằng cá thể TextBlock là một phần của cá thể Grid, bạn có thể thực hiện điều này: mygrid.Children.Add (myTextBlock);
Rodrigo Caballero

Đừng quên sử dụng điều phối viên khi bạn cần thực hiện thay đổi trong thời gian chạy. Đó là trường hợp của tôi.
Hagen

31

Đây là một ví dụ có thể giúp ai đó:

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

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

1

Thử đi:

                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
                    }
                }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.