如何在运行时为WPF中使用Grid的组合框选中值添加文本框控件

本文关键字:组合 控件 文本 添加 运行时 WPF Grid | 更新日期: 2023-09-27 18:05:02

我在wpf中有一个按钮。如果我点击按钮,它将在网格中创建一行3列。第一列有3个项目的组合框。Item1,Item2和Item3。第二列没有控件,第三列有文本框控件。

如果组合框项值checked等于item3,那么我需要添加一个文本框控件到网格的第二列到同一行。我有添加这些控件的代码。但是我不知道如何在运行时为特定的checkboxItem3行添加文本框。

注:复选框值可随时勾选。即使我在运行时检查,它也必须为各自行的第二列创建新的文本框。

这是我的代码。

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++;
    }

如何在运行时为WPF中使用Grid的组合框选中值添加文本框控件

您可以使用ComboBoxTag属性来存储行信息:

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;

然后在事件处理程序方法中,您可以轻松地在正确的Grid行中添加新的TextBox,例如:

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);
    }
}