2013-07-09 50 views
0

我有一个大的列表(〜10000项)在一个ComboBox中,使用VirtualizingStackPanel类。滚动性能很好,无论如何,我想知道如何识别GUI中显示的顶层项目 - 它不一定是索引为零的顶层项目,而是位于当前滚动项目列表之上的顶层项目。 ?谢谢。如何获取下拉菜单中显示的wpf组合框的第一项?

+0

你是否将列表绑定到一组项目?还是你手动添加它们?另外,你是说你想在当前视图中的第一个项目?那么,如果项目52是第一个可见项目,那么您将能够识别52? – Killingsworth

+0

组合框通过ItemsSource绑定到一个集合,并且是的,我想要52,如果它在顶部。 – deafjeff

回答

0

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

In WPF, how can I determine whether a control is visible to the user?

你可以(通过使用一个后台线程或做用户在组合框中滚动时的计算),检查组合框中的项目以查看它们的FrameworkElement.IsVisible属性是否设置为true。如果是这样,则在其ViewModel中更新该元素的IsVisible属性。现在,您的ViewModel中有一些项目被标记为可见或不可见(并且不断更新它所代表的CoboBox项目的可见性)。现在您可以找到哪些是第一个使用.First(x => x.IsVisible == true)的项目集合。

+0

我不知道如何检索Frameworkelement,因为我实际上只对viewmodel进行操作,并且已经设置了Combobox ItemsSource。 – deafjeff

+0

你的答案是一个好方法,但是如果你已经设置了ItsmSource,是否真的存在ComboBoxItems的实例?例如,当你想在Items memebr上操作时,由于你设置了ItemsSource,你会得到一个异常。 – deafjeff

+0

我刚刚通过指定ItemsSource来读取,这些Items是由wpf系统自动生成的。这解释了他们无法由Items成员访问。这使得检索所属框架元素成为更具挑战性的任务。任何帮助赞赏。 – deafjeff

相关问题