Автозаполнение текстового поля в WPF

Можно ли сделать автозаполнение текстового поля в WPF?

Я нашел образец, в котором используется поле со списком, и треугольник удаляется путем редактирования шаблона стиля.

Есть ли лучшее решение?

Вы можете найти его в WPF Toolkit , который также доступен через NuGet.

В этой статье показано, как создать текстовое поле, которое может автоматически указывать элементы во время выполнения на основе ввода, в данном случае, дисковых папок. Папка автозаполнения WPF TextBox

Также взгляните на этот красивый многопользовательский WPF Autocomplete TextBox , он был для меня очень удобным.

Nimgoble’s – это версия, которую я использовал в 2015 году. Думал, что я бы сказал, что этот вопрос был вершиной списка в google для «текстового поля автозаполнения wpf»,

  1. Установка пакета nuget для проекта в Visual Studio

  2. Добавьте ссылку на библиотеку в xaml:
    xmlns:behaviors="clr-namespace:WPFTextBoxAutoComplete;assembly=WPFTextBoxAutoComplete"

  3. Создайте текстовое поле и привяжите AutoCompleteBehaviour к List (TestItems):
    behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems}" />

ИМХО это намного легче начать и управлять, чем другие варианты, перечисленные выше.

Я опубликовал WPF Auto Complete Text Box в WPF на CodePlex.com. Вы можете скачать и попробовать его с https://wpfautocomplete.codeplex.com/ .

или вы можете добавить AutoCompleteBox в панель инструментов, щелкнув по нему, а затем выбрав «Элементы», перейдите к компонентам WPF, введите фильтр AutoCompleteBox, который находится в пространстве имен System.Windows.Controls, и просто перетащите в свой файл xaml. Это намного проще, чем делать другие вещи, поскольку AutoCompleteBox – это собственный элемент управления.

и здесь вилка инструментария, которая содержит порт для 4.O,

https://github.com/jogibear9988/wpftoolkit

это сработало очень хорошо для меня.

Я знаю, что это очень старый вопрос, но я хочу добавить ответ, который я придумал.

Сначала вам нужен обработчик для вашего обычного TextChanged событий TextChanged для TextBox :

 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 элементов, поэтому он циклически проходит очень быстро.

  • Как разместить содержимое WPF в приложениях MFC?
  • WPF StringFormat на содержании ярлыков
  • WPF: Как сделать автоматическое изменение размера canvasа?
  • Установите надстрочный индекс и индекс в форматированном тексте в wpf
  • Давайте будем гением компьютера.