如何通过代码生成WPF控件

6 .net c# wpf xaml

我试图了解XAML,并认为我会尝试编写一些代码.

尝试添加具有6乘6列定义的网格,然后将文本块添加到其中一个网格单元格中.我似乎无法引用我想要的细胞.网格上没有方法可以添加文本块.只有grid.children.add(对象),没有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>
Run Code Online (Sandbox Code Playgroud)

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

更新

这是幽灵般的一点:

  • 在XP上使用VS2008 Pro

  • WPFbrowser项目模板(3.5已验证)

我没有自动完成方法.

Mat*_*ton 7

WPF使用一种称为附加属性的时髦东西.所以在你的XAML中你可以这样写:

<TextBlock Grid.Row="0" Grid.Column="0" />
Run Code Online (Sandbox Code Playgroud)

这将有效地将TextBlock移动到网格的单元格(0,0)中.

在代码中,这看起来有点奇怪.我相信它会是这样的:

g.Children.Add(tb);
Grid.SetRow(tb, 0);
Grid.SetColumn(tb, 0);
Run Code Online (Sandbox Code Playgroud)

看看上面的链接 - 附加的属性使XAML中的事情变得非常容易,可能会牺牲直观的代码.