我想要一个listBox,我将填充项目。当用户滚动到listBox
的底部时,listBox
应加载更多项目。
在WP7中有很多教程可以做到这一点,但是我没有在Silverlight Web应用程序中找到任何可靠的内容。
在尝试不同的事情时,我设法创建了一个方法,当用户滚动到ListBox的底部时,该方法可以显示消息。这更像是一个概念证明,而不是最终实现:
ScrollViewer scrollViewer = new ScrollViewer();
var childScrollViewer = VisualTreeHelper.GetChild(this, 0);
if (childScrollViewer is ScrollViewer)
scrollViewer = (ScrollViewer)childScrollViewer;
if (scrollViewer.VerticalOffset >= scrollViewer.ScrollableHeight)
MessageBox.Show("You're at the bottom!");
我目前正在从ListBox的MouseWheel
事件中调用此方法。这种方法并不理想,因为它不会考虑用户单击滚动条并将其拖动。此实现也很差,因为当用户滚动到列表框的顶部或底部时会显示该消息。
这里有一些很好的WP7教程,我发现我希望可以在Silverlight Web应用程序中实现:
我只需要指出正确的方向。无论是教程,还是我可以了解的概念,都可以帮助我在Silverlight Web应用程序中实现这一功能。
答案 0 :(得分:2)
This教程救了我的命。这就是我最终做的事情:
我的ListBox
:
<ListBox x:Name="lstEventHistory"
Grid.Row="1"
d:DataContext="{d:DesignData /SampleData/AssetLifeCycleSampleData.xaml}"
Background="Transparent"
BorderBrush="#FFD4D4D6"
BorderThickness="0"
ItemsSource="{Binding Source={StaticResource eventsViewSource}}"
Loaded="initScrollViewerMonitor"
ScrollViewer.VerticalScrollBarVisibility="Auto" />
此方法由ListBox
的{{1}}事件调用,并将自定义绑定附加到Loaded
内的ScrollViewer
。此绑定将检查ListBox
的{{1}}属性中的更改:
ScrollViwer
最后,只要VerticalOffset
private void initScrollViewerMonitor(object sender, EventArgs e)
{
//get the ScrollViewer from the ListBox
scrollViewer = lstEventHistory.GetScrollHost();
//attach to custom binding to check if ScrollViewer verticalOffset property has changed
var binding = new Binding("VerticalOffset") { Source = scrollViewer };
var offsetChangeListener = DependencyProperty.RegisterAttached(
"ListenerOffset",
typeof(object),
typeof(UserControl),
new PropertyMetadata(OnScrollChanged));
scrollViewer.SetBinding(offsetChangeListener, binding);
}