2015-09-27 2 views
0

Я хочу добавить RowDefinitions в объявленные Grid-уведомления. Я мог бы получить количество строк в базе данных и повторить это число раз, но я не могу добавить элементы управления в строку.Невозможно динамически добавлять строки в сетку в WPF

Строка создается, но StackPanel не добавляется. Мой код хочет динамически создавать строки, а StackPanel и StackPanel - метку и изображение. В файле .xaml я только добавил Grid.

Как добавить строку с StackPanel в сетку?

Это мой код:

StackPanel sp; 
    Label dt_label; 
    Image img; 
    BitmapImage bitmap; 
    string col1=null, col2 = "Picture_Path"; 
    string Picture_Path=null; 
    RowDefinition gridRow1; 
    DateTime time; 

    for (int row_num = 0; row_num < No_Of_Rows; row_num++) 
    { 
     DataRow row = dt1.Rows[row_num]; 
     foreach (object item in row.ItemArray) 
     { 
      gridRow1 = new RowDefinition(); 

      sp = new StackPanel(); 

      sp.Background = new SolidColorBrush(Colors.Yellow); 
      col1 = "Date_Time".ToString(); ; 
      time = DateTime.Parse(dt1.Rows[row_num][col1].ToString()); 

      dt_label = new Label(); 
      dt_label.Content = time; 

      Picture_Path = dt1.Rows[row_num][col2].ToString(); 

      img = new Image(); 

      bitmap = new BitmapImage(); 
      bitmap.BeginInit(); 
      bitmap.UriSource = new Uri(Picture_Path, UriKind.Relative); 
      bitmap.EndInit(); 
      img.Source = bitmap; 

      img.Height = 100; 
      img.Width = 100; 

      sp.Children.Add(dt_label); 
      sp.Children.Add(img); 
      notices.RowDefinitions.Add(gridRow1); 
      break; 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("ERROR \n" + ex.ToString()); 
} 
+1

Удалите весь этот код и используйте привязку данных. –

ответ

0

Вы должны установить вложенные свойства (Grid.Row и Grid.Column) к элементам управления с помощью Grid.SetRow и Grid.SetColumn.

После этого вам нужно добавить управление к сетке, как это:

nameOfYourGrid.Children.Add(nameOfYourControl); 

Кроме того, есть некоторые интересные строк в коде:

"Date_Time".ToString(); ; 

Почему вы превращающий string к string?

Большинство полей можно перемещать на внутренний foreach scope.

Смежные вопросы