2011-08-24 6 views
3

데이터 그리드를 사용하는 .Net 4.0 WPF 응용 프로그램이 있습니다. 현재는 열을 기준으로 정렬 한 후에 그리드의 스크롤 위치는 정렬 이전의 위치를 ​​유지합니다.WPF DataGrid 정렬 후 맨 위로 스크롤

이 응용 프로그램의 경우 정렬 후 그리드의 맨 위로 스크롤해야합니다.

나는이

Private Sub myDataGrid_Sorting(sender As Object, e As System.Windows.Controls.DataGridSortingEventArgs) Handles myDataGrid.Sorting 
      myDataGrid.ScrollIntoView(myDataGrid.Items(0)) 
    End Sub 

처럼 정렬 이벤트를 처리 시도했다 그러나이 정렬이 발생하고 스크롤을 수행하지 않습니다하기 전에 화재로 나타납니다.

생각하십니까?

답변

6

VB에서 구문을 모르지만 거의 같아야한다고 생각합니다. 다음은 C#으로이다 :

일반적으로, 데이터 그리드의 첫 번째 시각적 자식은 장식, 그리고 장식의 아이가있는 ScrollViewer입니다. ScrollViewer에서 DataGrid에 표시되는 항목을 조작 할 수 있습니다.

오 ... 그리고 VisualTreeHelper는 현재 시각적 요소에서 현재 또는 현재 시각의 내부 또는 외부로 이동할 때 도움이됩니다. System.Windows.Media에 있습니다.

희망이 도움이되었습니다. 건배

편집 : 내가 게시하기 전에 잊어 버린 또 다른 한 가지 ... DataGrid에서 OnSorting 메서드를 재정의해야 할 수도 있습니다.

그래서이 새로운 기능을 구현할 DataGrid의 파생 클래스에서이 재정의를 사용하게됩니다.

protected override void OnSorting(DataGridSortingEventArgs eventArgs) 
{ 
    base.OnSorting(eventArgs); 

    var border = VisualTreeHelper.GetChild(myDataGrid, 0) as Decorator; 
    if (border != null) 
    { 
     var scrollViewer = border.Child as ScrollViewer; 
     scrollViewer.ScrollToTop(); 
    } 
} 
+0

감사합니다. @Beljoda. 그랬어. – bkstill

+0

문제 없습니다. @bkstill. – Beljoda

0

다음은 VB 구문입니다.

Private Sub myDataGrid_Sorting(sender As Object, e As System.Windows.Controls.DataGridSortingEventArgs) Handles myDataGrid.Sorting 
    Dim border As Decorator = VisualTreeHelper.GetChild(myDataGrid, 0) 
    If border IsNot Nothing Then 
     Dim scrollViewer As ScrollViewer = border.Child 
     scrollViewer.ScrollToTop() 
    End If 
End Sub 
관련 문제