私は次のComboBox
ように宣言されているを持っています:
<ComboBox
Name="cmb" Height="20" Width="125" Margin="5,3,0,0"
Text="{Binding SomeList}"
UpdateSourceTrigger=PropertyChanged}"
Validation.ErrorTemplate="{StaticResource errorTemplate}"
IsEditable ="True"
IsSynchronizedWithCurrentItem="True"/>
に入力した内容に基づいてアイテムのリストをフィルタリングしようとしていComboBox
ます。今、私はカスタムコントロールを試し、のKeyUp
イベントなどを処理しComboBox
ましたが、私が常に遭遇する1つの問題は、ComboBox
最初に一致する項目に文字を入力した瞬間に、に入力されTextBox
、フィルターがのみを返すことです。リストを作成するその一致するアイテムには、1つのアイテムしかありません。これがKeyUp
イベントハンドラーとFilterPredicate
:です。
private bool FilterPredicate(object value)
{
if (value == null)
return false;
if (cmb.Text.Length == 0)
return true;
string prefix = cmb.Text;
return value.ToString().ToLower().Contains(prefix.ToLower());
}
private void cmb_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
ComboBox cbSender = sender as ComboBox;
cbSender.Items.Filter = null;
if (e.Key == System.Windows.Input.Key.Escape || e.Key == System.Windows.Input.Key.Tab ||
e.Key == System.Windows.Input.Key.Enter)
{
cbSender.IsDropDownOpen = false;
}
else if (e.Key == System.Windows.Input.Key.Down)
{
cbSender.IsDropDownOpen = true;
}
else
{
if (cbSender.HasItems)
{
cbSender.IsDropDownOpen = true;
}
}
}
のフィルターは、コンストラクター内ComboBox
のにバインドされています。FilterPredicate
さらに情報が必要な場合はお知らせください。
ありがとうございました