2012-06-30 5 views
0

탭 컨트롤 안에 여러 탭이있는 매우 복잡한보기가 있습니다. 하나의 탭에는 adorner 레이어가있는 컨트롤이 있습니다. 마우스 입력을 캡처하기 위해 MouseLeftButtonDown 이벤트 핸들러에서 CaptureMouse를 호출하는 Adorner 레이어. 모든 것이 잘 작동합니다.WPF : CaptureMouse가 실패하는 이유는 무엇입니까?

그러나 뷰의 탭을 특정 순서로 전환 한 다음 adorner 레이어를 클릭하면 마우스 입력을 캡처하지 못합니다. CaptureMouse()는 false를 반환합니다. 같은 시간에 Mouse.Captured가 null을 반환합니다. adorner 레이어를 호스트하는 컨트롤이 계속 잘 작동하고 마우스를 캡처 할 수 있습니다.

많은 사용자 지정 컨트롤이 사용 중이므로 코드를 입력 할 수 없습니다. 단순화 된 레이아웃에서는 모든 것이 잘 작동합니다.

CaptureMouse가 실패 할 수있는 이유는 무엇입니까?

답변

2

MouseLeftButtonUp 이벤트 처리기에서 ReleaseMouseCapture()를 호출하는지 확인하십시오. 그렇지 않으면 원래 adornerlayer가 계속 유지됩니다. 또한 확인하십시오

또한

하는 당신은 또한 마우스를 캡처하는 체인까지 더 이상 컨트롤이되지 않도록 확인

편집을 (당신은을 방지하기 위해 adorner 층에서 true로 처리 설정할 수 있습니다) IsEnabled가 true입니다. IInputElement 인 경우

5

a는 UIElement 또는 UIElement3D, IsVisibleIsEnabledtrue해야합니다. IInputElementContentElement 경우

는, 그래서 그냥 IsEnabledtrue해야 더 IsVisible이 없습니다. 물론 Mouse.Capture으로 전화하는 경우입니다. 또한 시각적 정보가 포함 된 IInputElementPresentationSource에는 IMouseInputProvider이 있어야합니다.

여기서 문제는 즉시 캡처하는 다른 요소이거나 CaptureIsVisiblefalse 인 것 같습니다.