2009-08-19 21 views
9

Bir ListViewScrollViewer arasındaki kaydırma çubuğunun, sanal kaydırma alanının alt kısmına ulaşıp ulaşmadığını algılamanın bir yolu var mı? Bunu, ListView üzerinde ObservableCollection no'lu sunucuya koymak için sunucudan daha fazla öğe almak için bunu tespit etmek istiyorum.WPF liste görünümü kaydırma çubuğu en altta olduğunda ne olur?

private void currentTagNotContactsList_scrollChanged(object sender, ScrollChangedEventArgs e) { 

    ListView v = (ListView)sender; 


    if (e.VerticalOffset + e.ViewportHeight == e.ExtentHeight) { 
     Debug.Print("At the bottom of the list!"); 
    } 

} 

bu bile doğru mu:

Şu anda yapıyorum? Ayrıca, olaya neden olan dikey kaydırma çubuğu ile buna neden olan yatay kaydırma çubuğu arasında ayrım yapmam gerekiyor (yani kutunun altına yatay olarak kaydırırsanız, sunucuya çağrı oluşturmaya devam etmek istemiyorum).

Teşekkürler.

cevap

8

Bunu çözdüm. Görünüşe göre, görüntüleyiciden ziyade ScrollBar'dan (XAML'de <ListView ScrollBar.Scroll="currentTagNotContactsList_Scroll") kendiliğinden olaylar almalıydım. Bu çalışır, ancak sadece kaydırma çubuğu aşağıdayken olay işleyicisinin tekrar tekrar çağrılmasından kaçınmanın bir yolunu bulmalıyım. Belki bir zamanlayıcı iyi olurdu: UWP için

private void currentTagNotContactsList_Scroll(object sender, ScrollEventArgs e) { 

    ScrollBar sb = e.OriginalSource as ScrollBar; 

    if (sb.Orientation == Orientation.Horizontal) 
     return; 

    if (sb.Value == sb.Maximum) { 
     Debug.Print("At the bottom of the list!"); 

    } 

} 
+2

ScrollBar.Scroll gibi got it pencereler 10 – djkp

1
//A small change in the "Max's" answer to stop the repeatedly call. 
//this line to stop the repeatedly call 
ScrollViewer.CanContentScroll="False" 

private void dtGrid_ScrollChanged(object sender, ScrollChangedEventArgs e) 
       { 
//this is for vertical check & will avoid the call at the load time (first time) 
        if (e.VerticalChange > 0) 
        { 
         if (e.VerticalOffset + e.ViewportHeight == e.ExtentHeight) 
         { 
          // Do your Stuff 
         } 
        } 
       } 
0

ben bu şartı sağlamak için nasıl .. Windows'un 10'da ListView için yok bu

<ScrollViewer Name="scroll" ViewChanged="scroll_ViewChanged"> 
    <ListView /> 
</ScrollViewer> 

private void scroll_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e) 
{ 
    var scrollViewer = (ScrollViewer)sender; 
    if (scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight) 
      btnNewUpdates.Visibility = Visibility.Visible; 
} 
İlgili konular