打开页面上的ListView.ScrollIntoView

时间:2014-08-03 11:48:25

标签: c# windows-store-apps windows-phone-8.1

我试图在Page构造函数和OnNavigatedTo中调用ListView.ScrollIntoView(使用Dispatcher来编组线程),但在这两种情况下都没有效果。但是,如果我在用户点击AppBarButton时调用它,它就能完美运行。

我已经读过ListView构建它的Visual模型异步,这就是原因,因为模型尚未构建。但是,我无法在List Store的Windows应用商店版本中找到要订阅的建议事件。我试图用不同的时间间隔用计时器调用ScrollIntoView,但都失败了。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

处理ListView.ContainerContentChanging事件。

    void lv_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
    {
        YourItem item = args.Item as YourItem;
        if (item != null)
        {
            if (item == TheItemYouWant)
            {
                ListView lv = sender as ListView;
                lv.ScrollIntoView(args.Item);
            }
        }
    }

我不喜欢添加计时器,但这将作为最后的手段。

    private void ListViewLoaded(object sender, RoutedEventArgs e)
    {
        var lv = sender as ListView;
        DispatcherTimer dt = new DispatcherTimer();
        dt.Interval = TimeSpan.FromSeconds(2);
        dt.Tick += (o, o1) =>
        {
            dt.Stop();
            lv.ScrollIntoView(lv.Items[50]);

        };
        dt.Start();
    }