Как удалить выпадающий список в WPF? - PullRequest
0 голосов
/ 24 июня 2019

Как вопрос, заданный выше, я создал ComboBox динамически из кода позади.

Код, указанный ниже (этот код находится внутри BtnAddComboBox_Click)

Grid grid = new Grid();
comboBox = new ComboBox();
comboBox.ItemsSource = salesman2;
comboBox.Name = "cbSalesman";

Button button = new Button();
button.Width = 50;
button.Name = "btnDelete";
button.Height = 30;
button.Background = Brushes.Transparent;
button.BorderBrush = Brushes.Transparent;
button.Click += new RoutedEventHandler(btnDeleteCB_Click);


grid.Children.Add(comboBox);
grid.Children.Add(button);

stackPanel.Children.Add(grid);

И у меня есть Button имя AddComboBox в моем XAML (синяя кнопка). когда пользователь нажимает на кнопку. Новый ComboBox будет добавлен вместе с DELETE BUTTON с именем btnDelete рядом с ним. так что это означает, что каждый comboBox будет иметь свою собственную кнопку удаления. он не имеет максимального числа ComboBox, поэтому он будет добавлять новый ComboBox всякий раз, когда пользователь нажимает кнопку.

Проблема в том, когда я нажимаю btnDelete. Он удалит все добавленные поля со списком (так как я думаю, что у него одно и то же имя)

Это мой метод удаления:

private void btnDeleteCB_Click(object sender, RoutedEventArgs e)
{
    StackPanel stackPanel = FindChildControl<StackPanel>(this,"spSalesmanCombobox") as StackPanel;
    stackPanel.Children.Remove(comboBox);
}

Когда я нажимаю btnDelete, то только ComboBox рядом с ним будет удалено. Как я могу это сделать ? Возможно ли это сделать?

Я хочу удалить сам ComboBox. не выбранный элемент / элементы внутри него.

1 Ответ

1 голос
/ 24 июня 2019

Вы можете попробовать что-то вроде этого.Это приведет к удалению сетки, в которой находится поле со списком и кнопка. Оставляя все остальные нетронутыми.(Я не могу проверить этот код, так как у меня сейчас нет IDE)

    private void btnDeleteCB_Click(object sender, RoutedEventArgs e)
    {
        Grid grd = (sender as Button).Parent as Grid; //sender is button -> Parent is your grid
        stackPanel.Children.Remove(grd);  //remove that grid from the Stackpanel that contans them all
    }

Как правило, я хотел бы отметить, что WPF желательно использовать с MVVM, где вам не нужно манипулировать таким интерфейсом, как этот,Его немного сложнее освоить, чем Windows формы, использующие код, но через некоторое время это окупится

...