Jak mohu vytvářet WPF kontroluje prostřednictvím kódu

hlasů
5

Snažil jsem se dostat hlavu kolem XAML a myslel, že se budu snažit psát nějaký kód.

Při pokusu o přidání mřížku se 6 o 6 definice sloupců přidejte blok textu do jedné z buněk sítě. I nezdá se, že by mohl odkazovat na buňku, že chci. Neexistuje žádná metoda na startovním roštu, že mohu přidat TextBlock se. Existuje pouze grid.children.add (objekt), žádná definice Cell.

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

Aktualizace

Zde je strašidelné bit:

  • Pomocí VS2008 Pro v XP

  • WPFbrowser šablony Project (3,5 ověření)

Já t získat metody automatického doplňování.

Položena 11/08/2008 v 08:26
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
7

WPF využívá funky, čemu se říká připojené vlastnosti . Takže v XAML můžete napsat toto:

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

A to bude účinně přesunout blok textu do buňky (0,0) vašeho sítě.

V kódu to vypadá trochu divně. Domnívám se, že to bude něco jako:

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

Podívejte se na tento odkaz výše - připojené vlastnosti dělat věci rychlé dělat v XAML snad na úkor intuitivní vypadající kódu.

Odpovězeno 11/08/2008 v 08:37
zdroj uživatelem

hlasů
0

Zde jsou některé ukázkový

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
Odpovězeno 01/12/2011 v 19:18
zdroj uživatelem

hlasů
0

Pomocí připojené vlastnosti třídy mřížky.

v C #:

Grid.SetRow( cell, rownumber )

V XAML:

<TextBlock Grid.Row="1" />

Také bych poradit, pokud nechcete použít dynamické mřížky, používají jazyk XAML značkovací. Já vím, že má křivku učení, ale jakmile se to zvládnout, to je tak mnohem jednodušší, a to zejména pokud se chystáte použít ControlTemplates a DataTemplates! ;)

Odpovězeno 11/08/2008 v 08:39
zdroj uživatelem

hlasů
0

Umístění buňka je připojený vlastnost - hodnota patří do TextBlock spíše než mřížce. Nicméně, protože vlastnost sama o sobě patří k mřížce, je nutné použít buď vlastnost pole definice nebo poskytované statické funkce.

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);
Odpovězeno 11/08/2008 v 08:39
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more