C# 已打开页面上的ListView.ScrollIntoView
我曾尝试在页面构造函数和OnNavigatedTo中调用ListView.ScrollIntoView(使用Dispatcher来整理线程),但在这两种情况下都没有效果。然而,若我在用户单击AppBarButton时调用它,那个么它工作得非常好 我读到ListView异步构建其可视化模型,这就是原因,因为模型尚未构建。但是,我在Windows应用商店版本的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,但都失败了 正确的方法是什么?处
正确的方法是什么?处理
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。