WPF: почему CaptureMouse может потерпеть неудачу?
У меня довольно сложный вид с несколькими вкладками внутри элемента управления вкладками. На одной вкладке находится элемент управления со слоем adorner. Слой Adorner вызывает CaptureMouse в обработчике события MouseLeftButtonDown для захвата ввода мыши. Все отлично работает
Но если я переключаю вкладки в представлении в определенном порядке, а затем щелкаю по слою adorner, он не может захватить ввод мыши: CaptureMouse() возвращает false. В то же время Mouse.Captured возвращает ноль. Элемент управления, на котором размещается слой рекламодателя, продолжает работать нормально и даже способен захватывать мышь.
Не могу предоставить код, потому что в действии много пользовательских элементов управления. В упрощенных макетах все работает отлично.
Любые предложения, почему CaptureMouse может потерпеть неудачу?
2 ответа
Если IInputElement
это UIElement
или UIElement3D
, IsVisible
а также IsEnabled
должно быть true
,
Если IInputElement
это ContentElement
, здесь нет IsVisible
так просто IsEnabled
должно быть true
, Это конечно во время звонка Mouse.Capture
, Так же PresentationSource
для IInputElement
визуальное должно иметь IMouseInputProvider
,
Я думаю, что проблема здесь или в другом элементе, немедленно захватившем, или IsVisible
являющийся false
во время звонка Capture
,
Убедитесь, что в обработчике события MouseLeftButtonUp вы вызываете ReleaseMouseCapture(), иначе ваш оригинальный adornerlayer будет удерживать его.
Также убедитесь, что у вас нет никаких элементов управления дальше по цепочке, которые также захватывают мышь (вы можете установить для handled значение true в слое adorner, чтобы предотвратить это)
Изменить: Также убедитесь, что IsEnabled верно.