2014-06-13 3 views
0

이 코드를 사용하여 scrollviewer가 페이지의 맨 아래에 있는지 확인합니다.scrollviewer가 페이지 상단에 있는지 확인하십시오.

private void OnScrollViewerUpdated(object sender, EventArgs e) 
    { 
     var verticalOffset = sv.VerticalOffset; 
     var maxVerticalOffset = sv.ExtentHeight - sv.ViewportHeight; 

     if (maxVerticalOffset < 0 || 
      verticalOffset == maxVerticalOffset) 
     { 
      swipe_next(); 
     } 


    } 

스크롤 뷰어가 페이지 상단에 있는지 어떻게 알 수 있습니까 ?? 그리고 스크롤 뷰어가 페이지의 맨 아래에 있다면 상단으로 이동할 수 있습니까?

답변

0

MSDN (http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.aspx)에 따르면이 방법을 사용하여 맨 위로 스크롤 할 수 있습니다 ScrollToVerticalOffset(double d)

그래서 당신의 메서드 호출이 좋아한다 :

//scroll to top: 
sv.ScrollToVerticalOffset(0); 

0의 오프셋 (offset) 수직 만약 당신의 뷰포트의 선두입니다 , 다음 행을 따라 무언가를 사용하여 이것을 확인할 수 있습니다 :

if(sv.VerticalOffset == 0) 
{ 
    //... 
} 
0

또한 p ointer가 눌려져 scrollviewer 조작 완료 이벤트가 발생했습니다.

이것은 단지 샘플이며이 스 니펫으로 시도해보십시오.

// Constructor 
public MainPage() 
{ 
    InitializeComponent(); 

    ListVerticalOffsetProperty = DependencyProperty.Register("ListVerticalOffset", typeof(double), typeof(MainPage), new PropertyMetadata(OnListVerticalOffsetChanged)); 

    YourScrollViewer.Loaded += YourScrollViewer_Loaded; 
} 

void YourScrollViewer_Loaded(object sender, RoutedEventArgs e) 
{ 
    var binding = new Binding 
     { 
      Source = YourScrollViewer, 
      Path = new PropertyPath("VerticalOffset"), 
      Mode = BindingMode.OneWay 
     }; 
    SetBinding(ListVerticalOffsetProperty, binding); 
} 

private void OnListVerticalOffsetChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
{ 
    var atBottom = YourScrollViewer.VerticalOffset >= YourScrollViewer.ScrollableHeight; 
    if (atBottom) MessageBox.Show("End"); 
} 

public readonly DependencyProperty ListVerticalOffsetProperty; 

public double ListVerticalOffset 
{ 
    get { return (double)GetValue(ListVerticalOffsetProperty); } 
    set { SetValue(ListVerticalOffsetProperty, value); } 
} 

here도 살펴보십시오.

관련 문제