C# 已打开页面上的ListView.ScrollIntoView

C# 已打开页面上的ListView.ScrollIntoView,c#,windows-store-apps,windows-phone-8.1,C#,Windows Store Apps,Windows Phone 8.1,我曾尝试在页面构造函数和OnNavigatedTo中调用ListView.ScrollIntoView(使用Dispatcher来整理线程),但在这两种情况下都没有效果。然而,若我在用户单击AppBarButton时调用它,那个么它工作得非常好 我读到ListView异步构建其可视化模型,这就是原因,因为模型尚未构建。但是,我在Windows应用商店版本的ListView中找不到要订阅的建议事件。我曾尝试在不同的时间间隔使用计时器调用ScrollIntoView,但都失败了 正确的方法是什么?处

我曾尝试在页面构造函数和OnNavigatedTo中调用ListView.ScrollIntoView(使用Dispatcher来整理线程),但在这两种情况下都没有效果。然而,若我在用户单击AppBarButton时调用它,那个么它工作得非常好

我读到ListView异步构建其可视化模型,这就是原因,因为模型尚未构建。但是,我在Windows应用商店版本的ListView中找不到要订阅的建议事件。我曾尝试在不同的时间间隔使用计时器调用ScrollIntoView,但都失败了


正确的方法是什么?

处理
ListView.ContainerContentChangeing
事件

    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();
    }

您是否尝试过ListView.Loaded?首先,我对它做了一点修改(我认为不需要强制转换为特定的项目类型,您可以比较对象是否相同)。而且,为了避免崩溃,在访问ListView时需要使用Dispatcher。