私はアイテムでいっぱいの銀色の自動補完ボックスを持っています。誰もがリストの最初の項目を強調表示する方法を知っているので、ユーザーがenterを押すと項目が選択され、ユーザーは必ずしもマウスを使用する必要はありませんか?オートコンプリートボックスシルバーの最初のアイテムを選択
他のウィンドウコントロールでは、selectedindex = 0を使用できます。
私はアイテムでいっぱいの銀色の自動補完ボックスを持っています。誰もがリストの最初の項目を強調表示する方法を知っているので、ユーザーがenterを押すと項目が選択され、ユーザーは必ずしもマウスを使用する必要はありませんか?オートコンプリートボックスシルバーの最初のアイテムを選択
他のウィンドウコントロールでは、selectedindex = 0を使用できます。
あなたが探しているのは、SelectedItemです。コードでやっているのであれば、autoCompleteControl.SelectedItem = listUsedToPopulate [0]のようなものが必要です。
興味のある人は、AutoCompleteBoxの子リストボックスコントロールへの参照を取得し、その上でSelectedIndexを使用する必要があります。 XAMLで
ただ、すでに与えられた良い答えについては詳しく説明し
IsTextCompletionEnabled = "True" を
を設定します。
最初に、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();
}
}
}
残念ながら、これは機能しません。ユーザーが入力すると、リストに表示される項目は1つだけです – Sico