如何检测ListView何时出现故障以及何时出现故障

时间:2015-12-25 00:32:19

标签: c# vb.net windows-phone

我有一个带有动态内容的ListView(本机),我想知道如何检测用户何时滚动它,但不知道“isScrolling = true / false”的样式,而是我想知道用户何时滚动它当用户将其向下滚动时。

我试过这个伎俩:https://stackoverflow.com/a/27294644/4668642 但问题是它只返回“真/假”(实际上它会触发一个Sub)并且它也泛滥Sub(我的意思是,我非常努力地滚动ListView并且Sub被多次触发,所以它的动作是窃听)。

我不知道是否存在Native方式(就像ManipulationDelta [它不起作用]这样的事件)或者像该帖子那样的其他技巧。

这是我现在的代码:

"YourApplicationFileName.exe"=dword:00002af9`
"YourApplicationFileName.vshost.exe"=dword:00002af9`

注1:“Cab”是“自定义AppBar控件”(UserControl),isUp是一个布尔值,当Cab启动(可见)时返回True,当它关闭时隐藏(隐藏),goDownSub()是Sub隐藏“出租车”

注2:此代码是用VB(VisualBasic)编写的,但我也使用C#。使用C#而不是VB来回答我没有任何问题。

2 个答案:

答案 0 :(得分:0)

嗯,因为listview本身包含一个内置的滚动查看器,你无法将此控件放在另一个滚动查看器中并轻松获得滚动偏移,我的建议是在ScrollViwer中使用堆栈面板并监视ViewChanged事件中的更改of scrollViwer并通过VerticalOffset()方法获取当前偏移量。

答案 1 :(得分:0)

Okey,我找到了获得listview职位的方法。

以下代码摘自https://stackoverflow.com/a/4954586/4668642

var scrollViewer = FindScrollViewer(listBox);
var offset = scrollViewer.VerticalOffset;

static ScrollViewer FindScrollViewer(DependencyObject parent)
{
    var childCount = VisualTreeHelper.GetChildrenCount(parent);
    for (var i = 0; i < childCount; i++)
    {
        var elt = VisualTreeHelper.GetChild(parent, i);
        if (elt is ScrollViewer) return (ScrollViewer)elt;
        var result = FindScrollViewer(elt);
        if (result != null) return result;
    }
    return null;
}

然后可以确定列表视图滚动到哪个方向:

Double offSetNew, offSetOld

private void LVNot_ViewChanged()
{
    dynamic ScrollViewer = FindScrollViewer(LVNot);
    offSetNew = ScrollViewer.VerticalOffset;

    if (offSetOld != 0) { //To avoid (offSetOld > offSetNew) being fired in the first instance
        if (offSetOld > offSetNew) {
            //Go Up
        } else if (offSetOld < offSetNew) {
            //Go Down
        }
    }

    offSetOld = offSetNew;
}