По умолчанию ControlTemplate
ListView содержит элемент управления ScrollViewer
. PointerWheelChanged
- событие относительно низкого уровня, которое будет перехвачено ScrollViewer
.
Если вы хотите контролировать изменение расстояния прокрутки, PointerWheelChanged
не рекомендуется. Вы можете прослушать событие ScrollViewer.ViewChanged
и использовать ScrollViewer.VerticalOffset
для определения расстояния вертикальной прокрутки.
Для этого мы можем создать собственный ListView:
CustomListView.cs
public class CustomListView:ListView
{
private ScrollViewer _scrollViewer;
public event EventHandler<ScrollViewerViewChangedEventArgs> ViewChanged;
public CustomListView()
{
this.DefaultStyleKey = typeof(ListView);
}
protected override void OnApplyTemplate()
{
_scrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
if (_scrollViewer != null)
{
_scrollViewer.ViewChanged += CustomViewChange;
}
base.OnApplyTemplate();
}
private void CustomViewChange(object sender, ScrollViewerViewChangedEventArgs e)
{
ViewChanged?.Invoke(sender, e);
}
}
Использование
<controls:CustomListView x:Name="ListViewControl"
ViewChanged="ListViewControl_ViewChanged"
...>
<!--other content-->
</controls:CustomListView>
private void ListViewControl_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
var scrollViewer = sender as ScrollViewer;
double scrollHeight = scrollViewer.VerticalOffset;
if (scrollHeight > 120)
{
//Do Something...
}
else
{
//Do something...
}
}