如何重置Silverlight AutoCompleteBox下拉列表中的位置

时间:2009-10-14 19:40:37

标签: silverlight silverlight-3.0 controls autocomplete

假设我有一个包含1000个项目的AutoCompleteBox。

  1. 用户首先输入两个返回广泛结果集的字符(例如,100个项目)。
  2. 然后他们滚动到列表的底部并且......
  3. 然后他们选择关闭下拉列表的最后一项。
  4. 然后用户返回AutoCompleteBox并输入更精确的搜索,例如,返回25项。
  5. 由于之前选择的项目位于下拉列表的底部,因此AutoCompleteBox会显示新搜索结果的最后一个元素,而不是显示列表顶部的第一个项目。
  6. 如何强制AutoCompleteBox显示从列表中的第一项开始的结果?

2 个答案:

答案 0 :(得分:1)

这是基于默认控件模板的盲猜。在DropdownOpening事件中: -

 var sv = ((FrameworkElement)sender).FindName("ScrollViewer") As ScrollViewer;
 if (sv != null)
   sv.VerticalOffset = 0;

答案 1 :(得分:1)

我知道这不是一个答案,但我想我会分享我发现的东西,即使它没有解决问题。我在DropDownOpening事件中尝试了以下所有内容。

  1. SelectedItem设置为null。 - 失败。
  2. 按照安东尼的建议。 - 失败了。首先,senderAutoCompleteBox,不包含ScrollViewer。其次,VerticalOffset是只读的。
  3. 我检查了AutoCompleteBox中的所有变量,发现它有一个名为DropDownPopup的非公共变量,它是System.Windows.Control.PopupHelper的一个实例。虽然我在那个图书馆里找不到它。但是,它包含一个带有变量Popup的{​​{1}}属性。但是,我试图继承VerticalOffset并且无法访问该变量,所以我怀疑它必须是私有的。