0

私は次の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

さらに情報が必要な場合はお知らせください。

ありがとうございました

4

1 に答える 1

0

isTextSearchEnabled プロパティを無効にするとうまくいきました。

于 2013-02-21T13:21:03.657 に答える