我正在开发基于WinRT的Windows Phone 8.1应用。
当用户将ListBox滚动到结尾时,如何检测或接收通知?
答案 0 :(得分:0)
修改强> 我知道这可能是一个古老的话题,但今天我恰好在同一条船上,所以这就是我想出来的。
只需将ListBox
包裹在ScrollViewer
周围,然后设置viewChanged
事件处理程序即可获得所需内容。
在这种情况下,我使事件触发了#34;加载更多数据"当用户几乎在ScrollViewer的末尾
时<强> UI 强>
<ScrollViewer VerticalScrollBarVisibility="Auto" ViewChanged="yourEvent_ViewChanged">
<ListBox x:Name="ResultsListBox" ScrollViewer.VerticalScrollBarVisibility="Hidden">
</ListBox>
</ScrollViewer>
<强>代码隐藏强>
private void yourEvent_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
if ((sender as ScrollViewer).VerticalOffset >= ((sender as ScrollViewer).ScrollableHeight - (sender as ScrollViewer).ViewportHeight / 4))
{
// Do your "Load more data" work here
}
}
答案 1 :(得分:-1)
尝试从listview中提取scrollviewer并使用以下方法
代码背后:
try:
1 << 31
except OverflowError:
# 32-bit
MAXSIZE = int((1 << 31) - 1)
else:
# 64-bit
MAXSIZE = int((1 << 63) - 1)
UI:
public sealed partial class MainPage : Page
{
public ObservableCollection<String> Collection = new ObservableCollection<string>();
private bool incall;
private int offset;
int _noofelements;
ScrollViewer _scrollViewer;
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
listview.ItemsSource = Collection;
addNumber(0);
}
public static ScrollViewer GetScrollViewer(DependencyObject depObj)
{
if (depObj is ScrollViewer) return depObj as ScrollViewer;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var result = GetScrollViewer(child);
if (result != null) return result;
}
return null;
}
private void OnViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
ScrollViewer view = (ScrollViewer)sender;
if ((view.VerticalOffset > 0.9 * view.ScrollableHeight) & !incall)
{
incall = true;
addNumber(++offset);
}
}
private void addNumber(int offset)
{
int start = offset * 20;
for (int i = start; i < start + 20; i++)
{
if (i % 20 == 0)
Collection.Insert(0, (_noofelements++).ToString());
else
Collection.Add((_noofelements++).ToString());
}
incall = false;
}
private void listview_Loaded(object sender, RoutedEventArgs e)
{
_scrollViewer = GetScrollViewer(listview);
if (_scrollViewer != null)
{
_scrollViewer.ViewChanged += OnViewChanged;
}
}
尝试用Listbox替换ListView,它会起作用。