WPF combobox добавить элемент

#wpf #xaml #combobox

#wpf #xaml #выпадающий список

Вопрос:

В Access 2010 (и других?) если вы назначаете «Форму редактирования элементов списка» для поля со списком, при открытии поля со списком появляется полупрозрачный значок редактирования, на который вы можете нажать и открыть форму для добавления / редактирования элементов в источнике данных поля со списком. Кто-нибудь знает, можно ли это реплицировать в WPF / Xaml, и если да, то как? Это выглядит очень гладко и намного лучше, чем кнопка рядом с полем со списком, как я это делаю в данный момент (я нашел множество примеров того, как добавить элемент в начало списка со списком, но это не то, что мне нужно

Большое спасибо
Kev T

Ответ №1:

Я не думаю, что это полный ответ, но у меня есть несколько идей. Я пытался все это продумать, но, вероятно, есть вещи, которые не совсем верны или которые можно было бы сделать лучше.

Создайте новый класс, который наследуется от ComboBox; давайте назовем его EditableComboBox. Присвойте ему шаблонную часть типа Button с именем PART_EditButton. Также добавьте свойство зависимости в EditableComboBox типа object ; давайте назовем его EditorContent. (Это будет содержимое всплывающего диалогового окна.)

Переопределите OnApplyTemplate, чтобы получить ссылку на кнопку (используя GetTemplateChild) и прикрепите обработчик события к событию нажатия кнопки. При срабатывании события Click создайте и покажите дочернее окно и задайте его свойству Content значение EditorContent. Установите для его свойства DataContext значение DataContext редактируемого ComboBox.

Используйте Blend для создания копии ControlTemplate по умолчанию для кнопки; давайте назовем это MyButtonControlTemplate. Измените непрозрачность кнопки на что-то меньшее, чем 1, и добавьте раскадровку в VisualState наведения курсора мыши, которая устанавливает непрозрачность на 1.

Используйте Blend для создания копии ControlTemplate по умолчанию для ComboBox; давайте назовем это EditableComboBoxTemplate. Видите всплывающий узел? Добавьте еще одну прозрачную строку в дочернюю сетку и добавьте кнопку в этой строке с именем PART_EditButton. Установите для шаблона кнопки значение MyButtonControlTemplate. Затем создайте стиль по умолчанию для EditableComboBox, который устанавливает шаблон в EditableComboBoxTemplate.

При использовании EditableComboBox задайте его свойству EditorContent значение, позволяющее редактировать элементы, возможно, сетку, содержащую ListBox, привязанный к тому же ItemsSource, что и EditableComboBox.

Я надеюсь, что это хотя бы немного полезно. Я хотел бы предоставить пример кода, но, к сожалению, в данный момент у меня недостаточно времени. Это интересный вопрос, поэтому я постараюсь вернуться к нему позже, чтобы узнать, не подсказал ли вам кто-нибудь еще идею получше и / или не ответил ли на дополнительные вопросы, которые могут у вас возникнуть.

Комментарии:

1. Эндрю, спасибо вам за ваш ответ, вы, очевидно, много думали над этим, и я благодарен. Я проработаю вашу идею на следующей неделе и отчитаюсь (в эти выходные ничего не смогу сделать). Большое спасибо