Как программно создать панель xaml с элементами управления - PullRequest
0 голосов
/ 09 марта 2010

Можно ли программно создать новую панель в текущем документе, содержащую дубликаты элементов?Например, когда окно загружается, у меня есть сетка (одна строка) с тремя текстовыми полями, Fname01, Lname01 и DOB01, я хотел бы иметь кнопку, которая при нажатии добавила бы новую строку в сетку с тремя новыми полями (Fname02, Lname02 и DOB02).Каждый раз, когда нажимается кнопка (addrow), создается новая строка.Мне также интересно узнать, как эти поля идентифицируются в xaml, что позволило бы мне связывать данные или программно ссылаться на созданные поля для вставки значений в базу данных и т. Д.

Заранее спасибо,

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

Да. Чтобы создать новую строку, вызовите Grid.RowDefinitions.Add:

myGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) });

Затем, чтобы создать элементы, которые нужно поместить в сетку, добавьте их в список, установите свойства строки и столбца и добавьте их в коллекцию Grid.Children:

int rowIndex = myGrid.Rows.Count - 1;  // or whatever
TextBox fname = new TextBox();
Grid.SetRow(fname, rowIndex);
Grid.SetColumn(fname, 0);
myGrid.Children.Add(fname);

Теперь вы можете программно обращаться к текстовому полю через переменную:

fname.Text = "I'm a text box";

или установить на нем привязки:

fname.SetBinding(TextProperty, new Binding { Source = mySource, Path = new PropertyPath("FirstName") });

РЕДАКТИРОВАТЬ: Как говорит Бенни в своем ответе, если вы хотите отобразить коллекцию данных, тогда ItemsControl, безусловно, лучший способ, чем программно добавить в Grid макета. Я оставлю ответ, так как он все еще может иметь отношение к сценариям, не относящимся к списку предметов.

1 голос
/ 09 марта 2010

Вы должны использовать ListBox (или ListView) или DataGrid. Обычная сетка предназначена только для макета, , а не для управления коллекциями данных.

Если вы используете ListBox, вы можете создать DataTemplate для вашего объекта данных, который ListBox будет использовать для отображения объекта. В этом шаблоне данных создайте сетку из трех столбцов для хранения элементов управления для редактирования и привяжите эти элементы управления к свойствам объекта данных. Примеры и подробную информацию о шаблонах данных и привязке данных можно найти в Интернете. Существует множество примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...