2010-02-09 2 views
2

나는 실버 라이트 3SL3 트 리뷰하지 프로그래밍 스크롤

에서 트 리뷰 트 리뷰가 관찰 컬렉션에 바인딩되어 있습니다.

기본적으로 페이지가로드 될 때 기본적으로 트리 뷰의 모든 노드가 축소됩니다.

트리 뷰의 특정 항목을 프로그래밍 방식으로 선택할 수있는 기능이 있습니다.

내가 겪고있는 문제는 즉시 표시되지 않는 항목 (예 : 하나 이상의 상위 노드가 접혀 있음)이 선택되는 경우입니다. 프로그래밍 방식으로 확장하지만 프로그램 적으로보기로 스크롤하려고하면 사용자가 선택한 항목을 볼 수 있으므로 작동하지 않습니다.

나는 이것을 더 살펴 보았고 스크롤 뷰어의 계산 된 뷰포트 높이와 관련 있다고 생각합니다. 항목의 부모 노드가 확장되고 항목이 프로그래밍 방식으로 선택된 경우 트리 뷰를 해당 트리 뷰 항목에 대한보기로 스크롤하는 코드가 완벽하게 작동하므로 거의 타이밍 문제 인 것처럼 보입니다.

아래의 확장 방법을 참조하여 트리보기를보기로 스크롤하십시오. 이 문제를 해결하는 방법에 대한 도움이나 제안은 크게 감사하겠습니다.

감사합니다.

public static void BringIntoViewForScrollViewer(this FrameworkElement frameworkElement, ScrollViewer scrollViewer) 
    { 
     var transform = frameworkElement.TransformToVisual(scrollViewer); 
     var positionInScrollViewer = transform.Transform(new Point(0, 0)); 

     if (positionInScrollViewer.Y < 0 || positionInScrollViewer.Y > scrollViewer.ViewportHeight) 
      scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + positionInScrollViewer.Y - ScrollPadding); 
    } 
+3

당신이 VerticalOffset 및 ViewportHeight 속성은 확인하기 위해 확장 방법을 노드를 확장하고 호출 사이에 트 리뷰 나에서 ScrollViewer에에 UpdateLayout()를 호출 시도 되세요 최신 정보? –

+0

그게 - TreeView 및 ScrollViewer에서 UpdateLayout을 호출해야했습니다. 감사합니다. – Chris

+0

답변을 공식 답변으로 추가하고 답글로 표시하여 답이없는 검색 결과에는 표시되지 않도록 할 수 있습니다. –

답변

1

노드를 확장하고 VerticalOffsetViewportHeight 특성이 최신 확인하기 위해 확장 메서드를 호출 사이에서 TreeView 또는 ScrollViewer에 전화 UpdateLayout.

(문제 해결을 주도 Dan Auclair에 의해 코멘트에서 복사 답)