2014-02-05 3 views
1

안에 ScrollViewer이 있습니다. 그 ScrollViewer에 대한 액세스 권한이 있고 스크롤이 끝나는 시점을 감지하고 싶습니다. 터치 앱이므로 드래그 할 수 있습니다. 바로 의 콘텐츠가 있기 때문에 스마트 폰에서하는 것처럼 빠르게 스 와이프하면 내가 원하는 것을 수행 할 수 있습니다. 여전히 끌기/스크롤하는 경우 PreviewTouchUp은 스크롤링의 끝 부분을 반영하지 않고 이전에 트리거됩니다.

ScrollViewer가 스크롤을 멈췄을 때를 감지합니다.

나는 모두 ScrollViewerSurfaceListBoxManipulation 이벤트 및 여러 다른 사람을 시도했다. 나는 또한 ScrollViewer.PanningDeceleration을 시도하고 정직하게, 나는 차이점을 보지 못한다. 근본적으로, 운 없음 지금까지.

그럼 ScrollViewerPreviewTouchUp이 표시된 후에도 스크롤의 끝을 어떻게 감지 할 수 있습니까?

+0

최종 목적은 동일하지만, 그 질문에 대한 답은'MouseWheel' 이벤트를 사용하고, 상호 작용에 '터치'를 사용하고 있기 때문에 적용되지 않습니다. –

+0

좋습니다, 그 정도면 충분합니다 ... 나는 가까운 투표를 철회 할 것입니다. – Sheridan

답변

3

ScrollViewer.ScrollChanged event을 처리 할 수 ​​없습니까? 연결된 페이지에서 그것은 ...

스크롤 위치, 범위 또는 뷰포트 크기가 변경 될 때 발생합니다.

따라서 이벤트가 발생할 때마다 잠시 기다리려면 DispatcherTimer을 시작하면됩니다. 스크롤 할 때. 스크롤이 멈추고 이벤트가 발생하지 않으면 Tick 핸들러가 호출되고 원하는 핸들을 수행 할 수 있습니다.

DispatcherTimer timer = new DispatcherTimer(); 
timer.Interval = new TimeSpan(0, 0, 0, 0, 250); 
timer.Tick += Timer_Tick; 

... 

private void ScrollChanged(object sender, ScrollChangedEventArgs e) 
{ 
    if (timer.IsEnabled) timer.Stop(); 
    timer.Start(); 
} 

private void Timer_Tick(object sender, EventArgs e) 
{ 
    timer.Stop(); 
    // Do what you want now that scrolling has stopped 
} 
+1

Sheridan, 고맙습니다. 문제는 충분하지 않습니다. 사용자가 만지지 않을 때를 감지하는 플래그를 추가해야했습니다. 예를 들어, 'Timer_Tick {timer.Stop(); if (! _ touchDown) // 여기에서 뭔가를하면 ...}'어쩌면 그 변화로 답을 업데이트 할 수 있습니다. –

0

조금 지저분한 것 같습니다하지만 셰리 던의 솔루션은 내가 ScrollViewer에 이동이 멈 추면 결정하기 위해 찾을 수있는 가장 좋은 방법 :이 같은 것을보십시오. 방금 타이머 간격을 조정하고 더 중요한 것은 scrollviewer 컨트롤에서 hittestvisible = false와 hittestvisible = true 사이에 "// 스크롤이 멈추기를 원합니다."라고 입력하는 것입니다.

관련 문제