2014-10-01 70 views
0

我想在我的網格中編程添加TextBox如何動態地將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()所有我添加一個新的children(),我可以做到這一點沒有RowDefinitions.Add(新的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); 
      } 
+0

可能的重複的[WPF - 在代碼隱藏的網格中更改控件的位置](http://stackoverflow.com/questions/3785572/wpf-change-the-place-of-a-control-在網格中的代碼後面) – 2014-10-01 22:10:29

+0

...或者[this](http://stackoverflow.com/questions/7127125/how-to-add-wpf-control-to-particular-grid-行和細胞過程中的運行時)。 – 2014-10-01 22:10:51

+0

如果你只是想顯示一個文本框列表,那麼用堆棧面板代替它怎麼樣? – failedprogramming 2014-10-01 22:11:19

回答

0

RowDefinition是需要的,因爲這是網格控件如何處理其子。如果網格中的兩個控件位於同一行和列中,則它們將根據它們添加到網格中的順序依次繪製。網格控件不考慮它包含的控件的邊界,它只關心每行和每列中的哪些控件。 A WrapPanel但是,不需要行和列。它將把它包含的控件放置在「網格狀」方式中,直到它基於方向屬性的值達到其自身的寬度或高度範圍。

相關問題