Автозаполнение текстового поля в WPF
Можно ли сделать автозаполнение текстового поля в WPF?
Я нашел образец, в котором используется поле со списком, и треугольник удаляется путем редактирования шаблона стиля.
Есть ли лучшее решение?
- Принудительное рендеринг элемента управления WPF в памяти
- Содержимое стиля кнопки отображается только в одном экземпляре Button
- ItemsControl с горизонтальной ориентацией
- Как отображать элементы в Canvas через Binding
- Изображение кнопки мыши WPF
- Форматирование текста в TextBlock
- Получить элемент doubleclick event listview
- Задайте элемент Focus в ListView WPF
- Как реализовать воздушное сообщение в приложении WPF
- RichTextBox (WPF) не имеет строкового свойства «Текст»
- Где можно найти бесплатный текстовый файл в текстовом поле WPF?
- программно добавлять столбцы и строки в WPF Datagrid
- Как получить детей из контейнера WPF по типу?
Вы можете найти его в WPF Toolkit , который также доступен через NuGet.
В этой статье показано, как создать текстовое поле, которое может автоматически указывать элементы во время выполнения на основе ввода, в данном случае, дисковых папок. Папка автозаполнения WPF TextBox
Также взгляните на этот красивый многопользовательский WPF Autocomplete TextBox , он был для меня очень удобным.
Nimgoble’s – это версия, которую я использовал в 2015 году. Думал, что я бы сказал, что этот вопрос был вершиной списка в google для «текстового поля автозаполнения wpf»,
-
Установка пакета nuget для проекта в Visual Studio
-
Добавьте ссылку на библиотеку в xaml:
xmlns:behaviors="clr-namespace:WPFTextBoxAutoComplete;assembly=WPFTextBoxAutoComplete"
-
Создайте текстовое поле и привяжите 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 элементов, поэтому он циклически проходит очень быстро.