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 верно.

Другие вопросы по тегам