class MyListView : ListView { public bool Scflag = false; public double Speed = 1.0f; ListViewItem _scrItm; int _index; public async Task AutoScrollAsync() { Scflag = !Scflag; while (Scflag) { mv(mvP()); await Task.Delay(16); } Scflag = false; } private double mvP() { _index = (int)_sv.VerticalOffset - 2; _scrItm = this.ContainerFromIndex(_index) as ListViewItem; return Speed / _scrItm.ActualHeight; } private void mv(double p) { _sv.ChangeView(null, _sv.VerticalOffset + p, null); _sv.UpdateLayout(); } }