Cum pot genera controale WPF prin cod

Încercam să-mi dau capul în jurul lui XAML și credeam că voi încerca să scriu un cod.

Încercarea de a adăuga o rețea cu 6 până la 6 definiții ale coloanelor adaugă apoi un bloc text într-unul din celulele rețelei. Nu par să fiu capabil să fac referire la celula pe care o doresc. Nu există nicio metodă pe grila la care să pot adăuga blocul de text. Există numai grid.children.add (obiect), nici o definiție a celulei.

XAML:




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

Actualizare

Iată fragmentul infricosator:

  • Utilizarea VS2008 Pro pe XP

  • Șablon de proiect WPFbrowser (verificat 3.5)

Nu obtin metode in completarea automata.

0
fr hi bn

4 răspunsuri

WPF folosește un lucru funky numit proprietăți atașate . Deci, în XAML-ul dvs. puteți scrie acest lucru:


Și acest lucru va muta în mod efectiv TextBlock-ul în celula (0,0) a grilei tale.

În cod, acest lucru pare puțin ciudat. Cred că ar fi ceva de genul:

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

Aruncați o privire la linkul de mai sus - proprietățile atașate fac lucrurile foarte ușor de făcut în XAML, probabil în detrimentul codului intuitiv.

0
adăugat

Utilizați proprietățile atașate ale clasei Grid.

în C #:

Grid.SetRow( cell, rownumber )

În XAML:

De asemenea, aș sfătui dacă nu utilizați rețelele dinamice, utilizați limba de marcare XAML. Știu, are o curbă de învățare, dar odată ce l-ai stăpânit, este mult mai ușor, mai ales dacă vei folosi ControlTemplates și DataTemplates! ;)

0
adăugat

Iată câteva exemple

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
0
adăugat

Locația celulei este o proprietate atașată - valoarea aparține TextBlock-ului mai degrabă decât Grid. Cu toate acestea, deoarece proprietatea propriu-zisă aparține Grid-ului, trebuie să utilizați fie câmpul definiție a proprietății, fie funcțiile statice furnizate.

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);
0
adăugat