如何动态地将TextBox添加到Grid?

时间:2014-10-01 22:06:44

标签: c# xaml

我正在尝试在网格中以编程方式添加TextBox

这是我的代码:

private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            var input= await OneListDataSource.GetItemAsync((string)e.NavigationParameter);
 foreach (string item in input.getItems()) {
            TextBox textBox = new TextBox();
                textBox.Text = item;
                grid.RowDefinitions.Add(new RowDefinition());
                grid.Children.Add(textBox);
            }
}

在我的xaml中:

<Grid Grid.Row="1" x:Name="ContentRoot" Margin="19,9.5,19,0">

        </Grid>

但是当我在模拟器中运行时,我只看到1行,所有项目似乎彼此重叠。 我尝试在我的xaml文件中删除Grid.Row,但我认为它没有任何区别。

更新:

感谢您的回答,我几乎可以使用它。现在我的问题是 为什么我需要添加一个新的RowDefintion()我添加一个新的子项(),我可以在没有RowDefinitions.Add(new RowDefinition())的情况下为每行添加吗?

foreach (string item in input.getItems()) {
            TextBox textBox = new TextBox();
                textBox.Text = item;
                grid.RowDefinitions.Add(new RowDefinition());  // why I need to do this everytime I add a new TextBox?
                Grid.SetRow(textBox, i++);
                Grid.SetColumn(textBox, 0);
                grid.Children.Add(textBox);
            }

1 个答案:

答案 0 :(得分:0)

需要RowDefinition,因为这是Grid控件处理其子项的方式。如果网格内的两个控件位于同一行和列中,则它们将根据它们添加到网格的顺序在彼此之上绘制。 Grid控件不遵循它包含的控件的边界,它只关心每行和每列中的控件。但是WrapPanel不需要行和列。它会将它包含的控件定位在&#34;网格中,如#34;直到它根据Orientation属性的值达到自身的宽度或高度范围。