C# 当scrollviewer滚动到其末尾时激发(调用)方法
在谷歌搜索了很多之后,我终于要问你们这些家伙了。C# 当scrollviewer滚动到其末尾时激发(调用)方法,c#,windows-phone-7,pagination,scrollviewer,C#,Windows Phone 7,Pagination,Scrollviewer,在谷歌搜索了很多之后,我终于要问你们这些家伙了。 我已经创建了scrollviewer,其中包含项目(listboxItems)以及从webservices获取的这些项目。但一次只能提取5个项目。所以最初是5项,然后是下5项(附加到scrollviewer),然后是下5项,依此类推 注意:-此处listBoxitems在scrollviewer中使用,而不是在列表框中使用 从Web服务获取的数据也包含--> 现在假设我获取数据的方法是--> 其中nextResult是下一个项目编号(例如:-如果
我已经创建了
scrollviewer
,其中包含项目(listboxItems
)以及从webservices
获取的这些项目。但一次只能提取5个项目。所以最初是5项,然后是下5项(附加到scrollviewer
),然后是下5项,依此类推
注意:-此处listBoxitems
在scrollviewer
中使用,而不是在列表框中使用
从Web服务
获取的数据也包含-->
现在假设我获取数据的方法是-->
其中nextResult是下一个项目编号(例如:-如果第二次请求,nextResult是6)
但是我无法编写代码来检测用户是否将scrollviewer滚动到底&然后调用或触发一个方法,不管怎么说强>
我被scrollviewer的垂直偏移量
、延伸光
、视口高度
、可滚动高度
等严重混淆,即将使用它们并计算所需信息以达到上述要求
所以,如果有人知道相同或曾经使用过scrollviwer,请发布答案 我是通过向适当的事件注册新的DependencyProperty ListVerticalOffset来实现的:
// 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); }
}
可能是这个解决方案或者它的实现不是最优的,但它对我有效。Hi Lumen,你的解决方案也对我有效,但是我在一个全景页面上有两个列表框,所以我在上面注册了你的代码的两个版本,但是这两个列表框混合了他们获得的数据,我如何将依赖属性与列表框链接?
getData(int nextResult)
{
// some code to fetch the data
}
// 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); }
}