Я хотел бы создать пользовательский элемент управления, который будет выглядеть как стандартный WPF ComboBox
, но вместо всплывающего окна вместо ItemsPresenter
будет другой пользовательский элемент управления. Итак, я создал новый класс, производный от System.Windows.Controls.Control
, добавил свойство IsDropDownOpen
и создал стиль, который на самом деле является копией стиля ComboBox
по умолчанию (основная идея заключается в том, что свойства Popup.IsOpen
и ToggleButton.IsPressed
привязан к свойству IsDropDownOpen
элемента управления).
Проблема в том, что Popup
не закрывается, когда я нажимаю за пределами элемента управления.
Я посмотрел на класс ComboBox
в Reflector и обнаружил, что ComboBox
использовал некоторую логику для обновления свойства IsDropDownOpen
, когда оно теряет захват мыши. Но этот код использует некоторые внутренние классы. Есть ли альтернативный способ определить, нажал ли пользователь за пределами элемента управления и закрыть Popup
?
UPD: я не нашел способ прикрепить файл к записи, поэтому я загрузил пример проекта здесь
Существует пользовательский элемент управления, похожий на ComboBox, но он имеет TreeView во всплывающем окне. Когда вы открываете всплывающее окно и щелкаете за пределами элемента управления, оно автоматически закрывается, но если вы открываете всплывающее окно, разверните «Item2», а затем щелкните за пределами всплывающего окна, которое не будет закрыто. Вопрос в том, как это исправить?