2009-10-14 65 views
1

可以說我有一個包含1000個項目的自動完成框。如何重置Silverlight自動完成框的下拉列表中的位置

  1. 用戶首先鍵入返回廣泛結果集的兩個字符(例如100個項目)。
  2. 然後,他們滾動到列表的底部,然後...
  3. 然後他們選擇關閉下拉菜單的最後一項。
  4. 用戶然後返回到自動完成框並輸入一個更精確的搜索,返回,比如說25個項目。
  5. 由於先前選擇的項目位於下拉框的底部,因此AutoCompleteBox會顯示新搜索結果的最後一個元素,而不是顯示列表頂部的第一個項目。

如何強制AutoCompleteBox顯示從列表中的第一項開始的結果?

+0

AutoCompleteBox會在下拉列表打開和關閉時分析事件。你有沒有嘗試重置這些事件中的選定項目? – JustLoren 2009-10-14 19:56:41

+0

我想這會觸發selecteditemchanged事件,關閉下拉並觸發另一系列事情。 – Feckmore 2009-10-14 20:02:40

+0

我回去開始嘗試改變dropdownopening事件中的選擇項,但意識到我不知道如何。我不知道如何引用列表中正在顯示的項目的過濾列表的第一項。有任何想法嗎? – Feckmore 2009-10-14 20:40:38

回答

1

這是基於默認控制模板的盲猜。在DropdownOpening事件: -

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

Ooooh ...太近了。我認爲它會工作一分鐘,但得到這個錯誤:「System.Windows.Controls.ScrollViewer.VerticalOffset'不能被分配 - 它是隻讀的」但謝謝!你只是對我對物體的理解做出了積極的調整。 – Feckmore 2009-10-15 12:15:04

+0

PS ...無論如何,發件人(AutoCompleteBox)中都找不到ScrollViewer。 – Feckmore 2009-10-15 12:20:52

1

我知道這是不是太多的答案,但我想我會分享我發現,即使它並沒有解決問題。我在DropDownOpening賽事中嘗試了以下所有內容。

  1. SelectedItem設置爲空。 - 失敗。
  2. 按照安東尼的建議。 - 失敗。首先,senderAutoCompleteBox並且不包含ScrollViewer。其次,VerticalOffset是隻讀的。
  3. 我檢查了AutoCompleteBox中的所有變量,發現它有一個名爲DropDownPopup的非公有變量,它是System.Windows.Control.PopupHelper的一個實例。儘管我在圖書館找不到它。但是,它包含一個Popup財產,其變量爲VerticalOffset。但是,我試圖繼承AutoCompleteBox,無法訪問該變量,因此我懷疑它必須是私有的。