在WPF中自动完成文本框

是否有可能在WPF中使文本框自动完成?

我find了一个使用combobox的示例,并通过编辑样式模板来删除三angular形。

有更好的解决scheme吗?

你可以在WPF Toolkit中find一个,也可以通过NuGet获得。

这篇文章演示了如何创build一个文本框,可以在运行时根据input自动build议项目,在这种情况下,磁盘驱动器文件夹。 WPF自动完成文件夹文本框

也看看这个不错的可重用WPF自动完成文本框 ,这对我来说非常有用。

Nimgoble的是我在2015年使用的版本。以为我把它放在这里,因为这个问题是在谷歌列表顶部的“WPF自动完成文本框”

  1. 在Visual Studio中安装项目的nuget包

  2. 在xaml中添加对库的引用:
    xmlns:behaviors="clr-namespace:WPFTextBoxAutoComplete;assembly=WPFTextBoxAutoComplete"

  3. 创build一个文本框并将AutoCompleteBehaviour绑定到List<String> (TestItems):
    <TextBox Text="{Binding TestText, UpdateSourceTrigger=PropertyChanged}" behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems}" />

恕我直言,这比上面列出的其他选项更容易开始和pipe理。

我已经在CodePlex.com上发布了WPF自动完成文本框WPF。 您可以从https://wpfautocomplete.codeplex.com/下载并尝试。;

或者你可以通过点击它,然后select项目,到WPF组件,键入在System.Windows.Controls命名空间的filterAutoCompleteBox,只需拖动到您的xaml文件中,将AutoCompleteBox添加到工具箱中。 这比做这些其他的东西要容易得多,因为AutoCompleteBox是一个本地控件。

我知道这是一个非常古老的问题,但我想添加一个我已经提出的答案。

首先,您需要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”是在应用程序启动时创build的目录名称列表。

然后只需附加处理程序:

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

无论你select放在List中将用于自动填充框。 如果您希望自动完成一个巨大的列表,这可能不是一个好的select,但在我的应用程序中,它只能看到20-50个项目,所以它循环很快。

这里的工具包的fork包含了4.0的端口,

https://github.com/jogibear9988/wpftoolkit

这对我来说工作得很好。