2011-09-23 3 views
1

Silverlight 4에서는 ScrollViewer 페이지를 내릴 때마다 (즉, 엄지에 인접한 영역에서 스크롤 막대를 클릭 할 때) 어떤 항목 상단에 있는지 확인하십시오. 엄지 손가락을 드래그하거나 마우스 휠을 사용할 때 부드럽게 스크롤해야합니다.Silverlight ScrollViewer가 최상위 항목을 완전히 볼 수있게하는 방법이 있습니까

내 고객은 항목이 맨 아래에있을 때와 아래쪽에있을 때 둘 다 반으로 잘라지기 때문에 항목을 반 페이지로 잘라내는 것이 마음에 들지 않습니다. 나는 일종의 완전한 두루마리를 제안했고 그는 그것을 좋아하지 않았다. 그는 페이징을 위아래로 움직이지 않으면 여전히 부드럽게 스크롤되기를 원합니다.

편집

여기 캐치입니다. 항목이 같은 크기가 아닙니다. 그래서 스크롤 뷰어 상단에있는 항목을 감지하고보기로 스크롤해야합니다. 이 작업을 수행하는 쉬운 방법이 있습니까?

답변

1

먼저해야 할 일은 ScrollViewer의 내부에서 수직 스크롤 막대를 찾아내는 것입니다. VisualTreeHelper의 도움으로이 작업을 수행 할 수 있습니다. 여러 블로그에 코드를 조금씩 사용하면 훨씬 쉽게 사용할 수 있습니다. 나는이 VisualTreeEnumeration을 추천한다 (그러나 나는 않을 것이다). 대신에 그 확장 클래스를 사용하면와 세로 스크롤 막대 얻을 수 있습니다 : 당신이 첨부 할 수 있습니다 이제

ScrolBar vertSB = someScrollViewer.Descendents() 
            .OfType<ScrollBar>() 
            .FirstOrDefault(sb => sb.Name = "VerticalScrollBar"); 

것은 스크롤 이벤트와 같이 발생 스크롤의 유형을 결정 :

여기
vertSB.Scroll += (s, args) => 
{ 
    if (args.ScrollEventType == ScrollEventType.LargeDecrement 
     || args.ScrollEventType == ScrollEventType.LargeIncrement) 
    { 
      // using args.NewValue determine the correct Integral value and assign 
      // using someScrollViewer.ScrollToVerticalOffset 
    } 
}; 
+0

는 캐치 . 항목이 같은 크기가 아닙니다. 그래서 스크롤 뷰어 상단에있는 항목을 감지하고보기로 스크롤해야합니다. – Jordan

관련 문제