WPFでテキストボックスのオートコンプリートを行うことはできますか?WPFのTextBoxをオートコンプリートする
コンボボックスを使用し、スタイルテンプレートを編集して三角形を削除したサンプルが見つかりました。
もっと良い解決策はありますか?
WPFでテキストボックスのオートコンプリートを行うことはできますか?WPFのTextBoxをオートコンプリートする
コンボボックスを使用し、スタイルテンプレートを編集して三角形を削除したサンプルが見つかりました。
もっと良い解決策はありますか?
WPF Toolkitにあるものを見つけることができます。これはNuGetでも利用できます。
この記事では、入力(この場合はディスクドライブフォルダ)に基づいて実行時にアイテムを自動的に提案できるテキストボックスを作成する方法をデモンストレーションします。 WPF AutoComplete Folder TextBox
また、この素敵なReusable WPF Autocomplete TextBoxを見てください、それは私にとって非常に役に立ちました。
をクリックするか、またはアイテムを選択してアイテムを選択し、WPFコンポーネントに移動し、System.Windows.Controls名前空間にあるフィルターAutoCompleteBoxを入力してxamlにドラッグするだけで、オートコンプリートボックスをツールボックスに追加できますファイル。これは、AutoCompleteBoxがネイティブコントロールなので、これらの他のものよりもずっと簡単です。
私はCodePlex.comのWPFでWPF Auto Complete Text Boxを公開しました。 https://wpfautocomplete.codeplex.com/からダウンロードして試すことができます。
Nimgoble'sは、Visualでプロジェクトのnugetパッケージをインストール
XAMLでライブラリへの参照を追加します。AutoCompletを
xmlns:behaviors="clr-namespace:WPFTextBoxAutoComplete;assembly=WPFTextBoxAutoComplete"
テキストボックスを作成してバインドList<String>
(TestItems)にeBehaviour:
<TextBox Text="{Binding TestText, UpdateSourceTrigger=PropertyChanged}"
behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems}" />
IMHOこれを起動して、上記の他のオプションよりも管理を取得する方がはるかに簡単です。
インラインオートコンプリートでうまく動作しますが、オプション付きのドロップダウンリストは表示されません。 – lambinator
@lambinator - はいいいえドロップダウン。デザインPOVから、私はちょうどいくつかの項目を持っているなら(20-50?と言う)、私はちょうどその前に入力することができるので、通常のコンボボックスを使用します:http://stackoverflow.com/a/8333801/345659。あまりにも多くのアイテムを表示すると(誰が年齢をスクロールしたいのですか?)、このオートコンプリートテキストボックスを使用します。 – JumpingJezza
これは非常に古い質問ですが、私が思いついた答えを加えたいと思います。
まずあなたが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; } }
を「ファイル」はリストでありますアプリケーションの起動時に作成されるディレクトリ名。
は、それからちょうどハンドラをアタッチ:
public class YourClass
{
public YourClass()
{
YourTextbox.PreviewKeyDown += DelPressed;
YourTextbox.TextChanged += TBTextChanged;
}
}
あなたはList
に置くことを選択したものは何でも、このオートコンプリートボックスのために使用されますと。あなたがオートコンプリートの膨大なリストを持っていると思うなら、これは素晴らしい選択肢ではないかもしれませんが、私のアプリでは20-50個のアイテムしか見られません。
'System.Windows.Controls.AutoCompleteBox'はWPFの一部ではありません。そのコントロールを使用するには、[WPF Toolkit](http://wpf.codeplex.com/)への参照を追加する必要があります。 –
@MartinLiversageビジュアルスタジオ2013のwpfツールキットを追加しました。でも、ツールボックスにオートコンプリートボックスは表示されません。何故ですか? – vigamage