2011-12-04 20 views
4

私はアイテムでいっぱいの銀色の自動補完ボックスを持っています。誰もがリストの最初の項目を強調表示する方法を知っているので、ユーザーがenterを押すと項目が選択され、ユーザーは必ずしもマウスを使用する必要はありませんか?オートコンプリートボックスシルバーの最初のアイテムを選択

他のウィンドウコントロールでは、selectedindex = 0を使用できます。

答えて

0

あなたが探しているのは、SelectedItemです。コードでやっているのであれば、autoCompleteControl.SelectedItem = listUsedToPopulate [0]のようなものが必要です。

+1

残念ながら、これは機能しません。ユーザーが入力すると、リストに表示される項目は1つだけです – Sico

2

興味のある人は、AutoCompleteBoxの子リストボックスコントロールへの参照を取得し、その上でSelectedIndexを使用する必要があります。 XAMLで

2

ただ、すでに与えられた良い答えについては詳しく説明し

IsTextCompletionEnabled = "True" を

0

を設定します。

最初に、jesseの回答 - IsTextCompletionEnabled="True"を設定すると、各キーストロークの後に、リストの最初の項目がテキストボックスに入力されます。 enterを押すと、ポップアップが閉じます。私がこのアプローチを使用しなかった理由は、ユーザがenterを押すのを待つことなく、すぐにSelectedItemを更新するからです。

シコさんの答えは私が使ったものです。 GetTemplateChildメソッドにアクセスするには、AutoCompleteBoxコントロールをサブクラス化する必要があります。コードは次のとおりです。

public class ExtendedAutoCompleteBox : AutoCompleteBox 
{ 
    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      UpdateSelection(); 
     } 
    } 

    private void UpdateSelection() 
    { 
     // get the source of the ListBox control inside the template 
     var enumerator = ((Selector)GetTemplateChild("Selector")).ItemsSource.GetEnumerator(); 

     // update Selecteditem with the first item in the list 
     enumerator.Reset(); 
     if (enumerator.MoveNext()) 
     { 
      var item = enumerator.Current; 
      SelectedItem = item; 

      // close the popup, highlight the text 
      IsDropDownOpen = false; 
      (TextBox)GetTemplateChild("Text").SelectAll(); 
     } 
    } 
} 
関連する問題