为什么ListView.ScrollIntoView不起作用?

jay*_*t55 13 .net c# wpf xaml

我试图滚动到视图,以便垂直listivew中的最后一项始终显示,但ListView.ScrollIntoView()永远不会工作.

我试过了:

button1_Click(object sender, EventArgs e)
{

            activities.Add(new Activities()
            {
                Time = DateTime.Now,
                Message = message
            });

            ActivityList.ItemsSource = activities;

            // Go to bottom of ListView.
            ActivityList.SelectedIndex = ActivityList.Items.Count;
            ActivityList.ScrollIntoView(ActivityList.SelectedIndex);
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

ActivityList.ScrollIntoView(ActivityList.Items.Count),ActivityList.ScrollIntoView(ActivityList.Items.Count + 1);但没有任何工作.

请帮忙.这真的很烦人.在这种情况下,文档不是很有用.

key*_*rdP 14

当方法需要item对象时,您将传入索引.尝试此操作滚动到所选项目.

ActivityList.ScrollIntoView(ActivityList.SelectedItem);
Run Code Online (Sandbox Code Playgroud)

如果要滚动到最后一项,可以使用此项

ActivityList.ScrollIntoView(ActivityList.Items[ActivityList.Items.Count - 1]);
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,我忘了提到这是我尝试的第一件事(根据文档)。那也行不通。 (2认同)
  • +1 @dkozl表示`SelectedIndex`值.Jase,如果仍然无效,请尝试在`ScrollIntoView`方法之前调用`ActivityList.UpdateLayout();`. (2认同)

Gáb*_*bor 9

它与内部列表表示有关,也就是说,当你调用ScrollIntoView().After after many尝试后,这些项目还没有到位,这就是我最终提出的,这似乎有效:将两个处理程序附加到每个ListBox/ListView:

<ListBox x:Name="YourList" ... Loaded="YourList_Loaded" SelectionChanged="YourList_SelectionChanged">
Run Code Online (Sandbox Code Playgroud)

和

void YourList_Loaded(object sender, RoutedEventArgs e) {
  if (YourList.SelectedItem != null)
    YourList.ScrollIntoView(YourList.SelectedItem);
}

void YourList_SelectionChanged(object sender, SelectionChangedEventArgs e) {
  if (YourList.SelectedItem != null)
    YourList.ScrollIntoView(YourList.SelectedItem);
}
Run Code Online (Sandbox Code Playgroud)

你不能没有的第二个处理程序.ScrollIntoView()设置所选项目后,您无法立即致电,尚未准备就绪.您必须允许列表在实际更改项目时通知您.第一个处理程序取决于具体情况,如果在初始加载列表内容后出现选择问题,您可能也需要它.