如何获取下拉列表中显示的wpf组合框的第一项?

如何获取下拉列表中显示的wpf组合框的第一项?,wpf,combobox,virtualizingstackpanel,Wpf,Combobox,Virtualizingstackpanel,我在一个组合框中有一个大列表(~10000项),它使用VirtualzingStackPanel类。滚动性能很好,无论如何,我想知道如何识别GUI中显示的最上面的项目——不一定是索引为零的项目,而是当前滚动项目列表顶部的项目?谢谢。我使用FrameworkElement.IsVisible属性。使用下面链接中的方法,您还可以检查元素是否部分可见(这在您的情况下很有用): 您可以(通过使用后台线程或在用户在组合框中滚动时进行计算)检查组合框中的项目,查看其FrameworkElement.IsV

我在一个组合框中有一个大列表(~10000项),它使用VirtualzingStackPanel类。滚动性能很好,无论如何,我想知道如何识别GUI中显示的最上面的项目——不一定是索引为零的项目,而是当前滚动项目列表顶部的项目?谢谢。

我使用FrameworkElement.IsVisible属性。使用下面链接中的方法,您还可以检查元素是否部分可见(这在您的情况下很有用):


您可以(通过使用后台线程或在用户在组合框中滚动时进行计算)检查组合框中的项目,查看其FrameworkElement.IsVisible属性是否设置为true。如果是,则更新其ViewModel中的“图元可见”属性。现在,您的ViewModel中有了一个标记为可见或不可见的项集合(并且不断更新它所表示的COBOX项的可见性)。现在,您可以在项集合上找到第一个使用.first(x=>x.IsVisible==true)的项

是否将列表绑定到项目集合?还是手动添加它们?另外,您是说希望当前视图中的第一项?因此,如果项目52是第一个可见的项目,您将能够识别52?combobox通过ItemsSource绑定到集合,是的,如果它在顶部,我想要52。我不知道如何检索Frameworkelement,因为我实际上只在viewmodel上操作,并且已经设置了combobox ItemsSource。您的答案是一个好方法,但是,如果您设置了ItsmSource,是否确实存在ComboBoxItems的实例?例如,当您想要对Items memebr进行操作时,您会得到一个异常,因为您设置了ItemsSource。这就解释了Items成员无法访问它们。这使得检索所属的框架元素变得更具挑战性。感谢您的帮助。是的,它们是自动生成的,但是您仍然可以从组合框访问各个元素。例如,如果将组合框滚动的事件处理程序放在xaml.cs文件中,将返回System.Object发送方。您应该能够将其强制转换为FrameworkElement并访问发件人内的对象(组合框项目)。谢谢,它可以与OnScrollChanged一起使用,其中EventArgs.VerticalOffset等于ItemsSource索引。