Pregunta

Yo estaba tratando de conseguir mi cabeza alrededor de XAML y pensé que iba a tratar de escribir algo de código.

Tratando de agregar una cuadrícula con 6 por 6 definiciones de columna, a continuación, agregar un bloque de texto en una de las celdas de la cuadrícula.Yo no parecen ser capaces de hacer referencia a la celda que quiero.No hay ningún método en la grilla que puedo agregar el bloque de texto también.Sólo hay cuadrícula.los niños.add(object), ninguna Célula definición.

XAML:

<Page x:Class="WPF_Tester.Page1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Page1"
    Loaded="Page_Loaded">

</Page>

C#:

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    //create the structure
    Grid g = new Grid();
    g.ShowGridLines = true;
    g.Visibility = Visibility.Visible;

    //add columns
    for (int i = 0; i < 6; ++i)
    {
        ColumnDefinition cd = new ColumnDefinition();
        cd.Name = "Column" + i.ToString();

        g.ColumnDefinitions.Add(cd);
    }
    //add rows
    for (int i = 0; i < 6; ++i)
    {
        RowDefinition rd = new RowDefinition();
        rd.Name = "Row" + i.ToString();

        g.RowDefinitions.Add(rd);
    }
    TextBlock tb = new TextBlock();
    tb.Text = "Hello World";

    g.Children.Add(tb);
}

Actualización

Aquí está la escalofriante bits:

  • El uso de VS2008 Pro en XP

  • WPFbrowser Plantilla de Proyecto (3.5 verificado)

No entiendo los métodos en la función autocompletar.

¿Fue útil?

Solución

WPF hace uso de una cosa que se llama funky las propiedades adjuntas.Así que en su XAML se podría escribir esto:

<TextBlock Grid.Row="0" Grid.Column="0" />

Y de esta forma, mueva el TextBlock en la celda (0,0) de la cuadrícula.

En este código se ve un poco extraño.Yo creo que sería algo como:

g.Children.Add(tb);
Grid.SetRow(tb, 0);
Grid.SetColumn(tb, 0);

Eche un vistazo a ese enlace de arriba - se adjunta propiedades hacen que las cosas realmente fáciles de hacer, en XAML, tal vez a expensas de intuitivo código de aspecto.

Otros consejos

La ubicación de celda es una propiedad asociada - el valor pertenece a la TextBlock en lugar de la Cuadrícula.Sin embargo, debido a que la propiedad pertenece a la Cuadrícula, usted necesita para utilizar la definición de la propiedad de campo o la estática de las funciones.

TextBlock tb = new TextBlock();
//
// Locate tb in the second row, third column.
// Row and column indices are zero-indexed, so this
// equates to row 1, column 2.
//
Grid.SetRow(tb, 1);
Grid.SetColumn(tb, 2);

Uso de las propiedades adjuntas de la Cuadrícula de la clase.

en C#:

Grid.SetRow( cell, rownumber )

En XAML:

<TextBlock Grid.Row="1" />

También, yo aconsejo si no uso dinámico de redes, utilizar el lenguaje de marcado XAML.Sé que tiene una curva de aprendizaje, pero una vez dominado, es mucho más fácil, especialmente si usted va a utilizar ControlTemplates y DataTemplates!;)

He aquí una muestra de

Grid grid = new Grid();

// Set the column and row definitions
grid.ColumnDefinitions.Add(new ColumnDefinition() {
     Width = new GridLength(1, GridUnitType.Auto) });
grid.ColumnDefinitions.Add(new ColumnDefinition() {
     Width = new GridLength(1, GridUnitType.Star) });
grid.RowDefinitions.Add(new RowDefinition() {
     Height = new GridLength(1, GridUnitType.Auto) });
grid.RowDefinitions.Add(new RowDefinition() {
     Height = new GridLength(1, GridUnitType.Auto) });

// Row 0
TextBlock tbFirstNameLabel = new TextBlock() { Text = "First Name: "};
TextBlock tbFirstName = new TextBlock() { Text = "John"};

grid.Children.Add(tbFirstNameLabel ); // Add to the grid
Grid.SetRow(tbFirstNameLabel , 0); // Specify row for previous grid addition
Grid.SetColumn(tbFirstNameLabel , 0); // Specity column for previous grid addition

grid.Children.Add(tbFirstName ); // Add to the grid
Grid.SetRow(tbFirstName , 0);  // Specify row for previous grid addition
Grid.SetColumn(tbFirstName , 1); // Specity column for previous grid addition

// Row 1
TextBlock tbLastNameLabel = new TextBlock() { Text = "Last Name: "};
TextBlock tbLastName = new TextBlock() { Text = "Smith"};

grid.Children.Add(tbLastNameLabel ); // Add to the grid
Grid.SetRow(tbLastNameLabel , 1);  // Specify row for previous grid addition
Grid.SetColumn(tbLastNameLabel , 0); // Specity column for previous grid addition

grid.Children.Add(tbLastName ); // Add to the grid
Grid.SetRow(tbLastName , 1);  // Specify row for previous grid addition
Grid.SetColumn(tbLastName , 1); // Specity column for previous grid addition
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top