29

私は WPF に ComboBox を持っており、これをかなりいじりました (カスタム テンプレートとカスタム アイテム テンプレートがあります)。ComboBox に入力すると、フィルタリングが行われることを除いて、希望どおりに機能するところまで到達しましたが、入力したものがアイテムの名前を開始すると仮定してフィルターのみが実行されますコンボボックス。

たとえば、ComboBox に「Windows Media Player」という項目がある場合、「Windows Media...」と入力し始めた場合にのみ検索され、「Media Play...」と入力し始めた場合は検索されません。 . これを回避する方法はありますか?StartsWith() を使用するだけでなく、文字列全体を検索するようにプロパティを設定できますか?

そうでない場合、自分でこれを行うための最良の方法は何ですか? 元のコントロールを取得して、基本的に StartsWith() の呼び出しを Contains() の呼び出しに変更する方法はありますか?

4

5 に答える 5

39

コンボボックスはオートコンプリートをサポートするようになりました。コンボボックスの xaml で確認してください。

IsEditable="True"
于 2011-11-30T22:21:03.270 に答える
8

CodeProject の次の記事を確認してください: A Reusable WPF Autocomplete TextBox

于 2009-12-30T20:25:10.060 に答える
4

ComboBoxのTextInputイベントまたはPreviewTextInputイベントを処理し、自分でテキスト検索を実行し、最も適切な項目を選択して、「e.Handled=true」を設定してみてください。ちょっとした考え。お役に立てれば!

編集:

これは単一の文字に対して機能します(つまり、文字「j」を入力すると、「j」または「J」を含む最初の項目が選択されます)が、コントロールを使用してこれを行う方法があると確信しています。楽しみ!

private void MyComboBox_PreviewTextInput(object sender, TextCompositionEventArgs e) {
    foreach (ComboBoxItem i in MyComboBox.Items) {
        if (i.Content.ToString().ToUpper().Contains(e.Text.ToUpper())) {
            MyComboBox.SelectedItem = i;
            break;
        }
    }
    e.Handled = true;
}
于 2009-02-18T03:06:48.110 に答える