48


27

WPFでテキストボックスをオートコンプリートにすることは可能ですか?

コンボボックスを使用し、スタイルテンプレートを編集して三角形を削除するサンプルを見つけました。

より良い解決策はありますか?

6 Answer


34


あなたは WPF Toolkitでそれを見つけることができます、そしてそれもNuGetを通して利用可能です。

この記事では、入力(この場合はディスクドライブフォルダー)に基づいて実行時にアイテムを自動推奨できるテキストボックスを作成する方法を紹介します。 WPFオートコンプリートフォルダのテキストボックス

また、この素晴らしい 再利用可能なWPFオートコンプリートテキストボックスを見てください。それは私にとって非常に有用でした。


12


https://github.com/Nimgoble/WPFTextBoxAutoComplete/ [Nimgoble’s]は、2015年に使用したバージョンです。 この質問は "wpf autocomplete textbox"のためのグーグルのリストのトップだったので、私はそれをここに入れたいと思った

  1. プロジェクト用のnugetパッケージをVisual Studioにインストールする

  2. xamlでライブラリへの参照を追加します:+ + xmlns:behaviors =" clr-namespace:WPFTextBoxAutoComplete; assembly = WPFTextBoxAutoComplete "+

  3. テキストボックスを作成し、AutoCompleteBehaviourを「+ List 」にバインドします (TestItems): + behaviors:AutoCompleteBehavior.AutoCompleteItemsSource =" {Binding TestItems} "/> +

私見これは、上に挙げた他のオプションよりも開始と管理がはるかに簡単です。


8


CodePlex.comでWPFのWPFオートコンプリートテキストボックスを公開しました。 https://wpfautocomplete.codeplex.com/からダウンロードして試すことができます。


4


または、オートコンプリートボックスをクリックしてからアイテムの選択を選択し、WPFコンポーネントに移動して、System.Windows.Controls名前空間にあるオートコンプリートボックスというフィルターを入力し、xamlファイルにドラッグするだけでオートコンプリートボックスを追加することもできます。 オートコンプリートボックスはネイティブコントロールなので、これは他の作業よりもはるかに簡単です。


4


そしてここでツールキットのフォークは4.Oへのポートを含みます、

それは私にとってとてもうまくいった。


3


これは非常に古い質問ですが、思いついた答えを追加したいと思います。

最初に、 `+ TextBox `の通常の ` TextChanged +`イベントハンドラーのハンドラーが必要です。

private bool InProg;
internal void TBTextChanged(object sender, TextChangedEventArgs e)
            {
            var change = e.Changes.FirstOrDefault();
            if ( !InProg )
                {
                InProg = true;
                var culture = new CultureInfo(CultureInfo.CurrentCulture.Name);
                var source = ( (TextBox)sender );
                    if ( ( ( change.AddedLength - change.RemovedLength ) > 0 || source.Text.Length > 0 ) && !DelKeyPressed )
                        {
                         if ( Files.Where(x => x.IndexOf(source.Text, StringComparison.CurrentCultureIgnoreCase) == 0 ).Count() > 0 )
                            {
                            var _appendtxt = Files.FirstOrDefault(ap => ( culture.CompareInfo.IndexOf(ap, source.Text, CompareOptions.IgnoreCase) == 0 ));
                            _appendtxt = _appendtxt.Remove(0, change.Offset + 1);
                            source.Text += _appendtxt;
                            source.SelectionStart = change.Offset + 1;
                            source.SelectionLength = source.Text.Length;
                            }
                        }
                InProg = false;
                }
            }

次に、単純な `+ PreviewKeyDown +`ハンドラーを作成します。

    private static bool DelKeyPressed;
    internal static void DelPressed(object sender, KeyEventArgs e)
    { if ( e.Key == Key.Back ) { DelKeyPressed = true; } else { DelKeyPressed = false; } }

この例では、 "Files"はアプリケーションの起動時に作成されたディレクトリ名のリストです。

それからハンドラを添付してください。

public class YourClass
  {
  public YourClass()
    {
    YourTextbox.PreviewKeyDown += DelPressed;
    YourTextbox.TextChanged += TBTextChanged;
    }
  }

これにより、 `+ List +`に入力するものはオートコンプリートボックスに使用されます。 あなたがオートコンプリートのための巨大なリストを持っていることを期待するなら、これは素晴らしいオプションではないかもしれません、しかし私のアプリでそれは今までに20-50アイテムを見るだけです。