У меня есть кнопка в wpf. если я нажму кнопку, он создаст строку с тремя столбцами в сетке. 1-я колонка имеет ComboBox с 3-мя элементами. Пункт 1, Пункт 2 и Пункт 3. 2-й столбец не имеет Control.3rd-столбца, имеет элемент управления Textbox.
Если значение элемента combobox отмечено равным элементу3, тогда мне нужно добавить элемент управления Textbox ко второму столбцу сетки в ту же строку. У меня есть код для добавления этих элементов управления. но я не знаю, как добавить текстовое поле для конкретной строки checkboxItem3 во время выполнения.
note: значение флажка можно проверить в любое время. даже если я проверю во время выполнения, он должен создать новое текстовое поле для соответствующей строки 2-го столбца.
это мой код.
public int count = 1;
private void btn_add_Click(object sender, RoutedEventArgs e)
{
//Creating Rows..
RowDefinition row0 = new RowDefinition();
row0.Height = new GridLength(30);
grid2.RowDefinitions.Add(row0);
//Creating columns..
ColumnDefinition col0 = new ColumnDefinition();
ColumnDefinition col1 = new ColumnDefinition();
ColumnDefinition col2 = new ColumnDefinition();
col0.Width = new GridLength(100);
col1.Width = new GridLength(100);
col2.Width = new GridLength(100);
grid2.ColumnDefinitions.Add(col0);
grid2.ColumnDefinitions.Add(col1);
grid2.ColumnDefinitions.Add(col2);
int i = count;
//1st Column Combobox
ComboBox cmb = new ComboBox();
cmb.Items.Add("item1");
cmb.Items.Add("item2");
cmb.Items.Add("item3");
Grid.SetRow(cmb, i);
Grid.SetColumn(cmb, 0);
grid2.Children.Add(cmb);
//3rd column Textbox
TextBox txt = new TextBox();
Grid.SetRow(txt, i);
Grid.SetColumn(txt, 2);
grid2.Children.Add(txt);
count++;
}
Свойство ComboBox
Tag
можно использовать для хранения информации о строках:
ComboBox cmb = new ComboBox();
......
......
//give the combobox a tag so you can identify...
//the row number of this combobox later
cmb.Tag = i;
//attach event handler
cmb.SelectionChanged += cmb_SelectionChanged;
Затем в методе обработчика событий вы можете легко добавить новый TextBox
в правильную строку Grid
, например:
void cmb_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(e.AddedItems[0].ToString() == "item3")
{
var txt = new TextBox();
var row = (int)((ComboBox)sender).Tag;
Grid.SetRow(txt, i);
Grid.SetColumn(txt, 1);
grid2.Children.Add(txt);
}
}