2012-04-15 3 views
1

처리 된 것으로 표시된 MouseMove 이벤트에 대한 알림을받을 수 있습니까? 나는 다음과 같은 XAML을 : 내 목표는 모든 MouseMove 이벤트 상기에서 ScrollViewer의 이벤트, 또는의에서 ScrollViewer에 ManipulationMode = "컨트롤"설정에 의존없이 의 ParentContainer 같은 것이 합리적으로 가까운 무언가를 얻을 수 있습니다 WP7.1에서 모든 MouseMove 이벤트를 처리 할 수 ​​있습니까?

<Grid x:Name="ParentContainer"> <ScrollViewer> ... </ScrollViewer> </Grid> 

최상의 성능.

ParentContainer (또는 ScrollViewer)에서 MouseMove 처리는 ManipulationMode = "Control"이 ScrollViewer에 설정되어 있지만 ManipulationMode = "System"일 때 작동하지 않습니다. Mango의 성능을 향상시키는 것처럼 들리지만 ScrollViewer는 성능을 향상시키기 위해 MouseMove 이벤트를 삼 키기 시작했습니다. 그러나, 다음과 같이 나는 그 처리 이벤트를 얻을 수 있기를 기대 :

ParentContainer.AddHandler(???.MouseMoveEvent, MyMouseMoveHandler, true); 

실버 라이트 또는 WPF에서 나는 경로에 MyMouseMoveHandler 모든 마우스 이벤트도 처리하는 이벤트를 해당 코드를 기대. 안타깝게도 AddHandler에 전달할 MouseMoveEvent의 정적 정의를 찾을 수 없습니다.

누군가 WP5에서 MouseMoveEvent와 함께 AddHandler를 사용하여 성공 했습니까?

내 마지막 수단은 모든 Mouse 이벤트를 캡처하지만 처리 된 것으로 표시하고 ScrollViewer로 전달되는지 확인하는 Background = "Transparent"인 ScrollViewer 위에 오버레이를 추가하는 것입니다.

답변

4

Windows Phone OS 7.1에서 ScrollViewer 컨트롤의 스크롤 기능을 향상시키기 위해 변경되었습니다. 이렇게하려면 터치 동작을 듣는 것을 별도의 실로 옮겨야했습니다. 이것은 컨트롤이 제스처를 듣는 방법에 대한 아키텍처 수준 변경을 의미했습니다. Windows Phone 7.1에서는 입력 용, 애니메이션 용, 새 항목 만들기 용의 세 가지 스레드가 ScrollViewer 스크롤을 담당합니다.

이 변경으로 인해 ManipulationMode를 Control으로 설정하지 않으면이 컨트롤에서 처리 된 마우스 이벤트를 캡처 할 수 없습니다. 당신의 질문에 언급했듯이, 이것은 스크롤링 성능을 향상시키기 위해 만들어진 변경을 불가능하게 할 것입니다.

기본 아키텍처가 Windows Phone 7.1부터 전화에서 근본적으로 다르므로 Windows Phone이 아닌 Silverlight에서 작동하는 솔루션은이 경우 작동 할 것으로 예상 할 수 없습니다.

다음은 변화에 대한 마이크로 소프트의 블로그 게시물입니다 : http://blogs.msdn.com/b/slmperf/archive/2011/06/02/listbox-scrollviewer-performance-improvement-for-mango-and-how-it-impacts-your-existing-application.aspx는 통지를 사용자가 화면을 터치 언제든지받을 수 Touch.FrameReported 이벤트를 사용하는 것이 가능 대신 마우스 이벤트를 찾는

+0

철저한 답변 Brian에게 감사드립니다. 당신 말이 맞아요. AddHandler()는 실버 라이트가 아닌 방법입니다. 해결 방법을 찾고 싶습니다. (아래 내 답변 참조). –

관련 문제