msi wpf textbox autocomplete wpf-controls

msi - wpf codeplex



Autocompletar TextBox en WPF (6)

¿Es posible hacer que un cuadro de texto se autocomplete en WPF?

Encontré una muestra donde se usa un cuadro combinado y se elimina el triángulo editando la plantilla de estilo.

¿Hay una mejor solución?



Puede encontrar uno en el WPF Toolkit , que también está disponible en NuGet.

Este artículo muestra cómo crear un cuadro de texto que puede sugerir automáticamente elementos en tiempo de ejecución en función de la entrada, en este caso, de las carpetas de la unidad de disco. WPF AutoComplete Folder TextBox

También eche un vistazo a este bonito y reutilizable WPF Autocomplete TextBox , fue para mí muy útil.


Sé que esta es una pregunta muy antigua, pero quiero agregar una respuesta que se me ocurrió.

Primero necesitas un controlador para tu controlador de eventos TextChanged normal para el 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; } }

A continuación, PreviewKeyDown controlador simple PreviewKeyDown :

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

En este ejemplo, "Archivos" es una lista de nombres de directorio creados en el inicio de la aplicación.

Luego solo adjunte los controladores:

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

Con esto, lo que sea que elija poner en la List se usará para el cuadro de autocompletar. Puede que esta no sea una gran opción si esperas tener una enorme lista para la autocompletar, pero en mi aplicación solo ve 20-50 elementos, por lo que se mueve rápidamente.


o puede agregar AutoCompleteBox en la caja de herramientas haciendo clic en ella y luego Elegir elementos, vaya a Componentes de WPF, escriba el filtro AutoCompleteBox, que está en el espacio de nombres System.Windows.Controls y simplemente arrastre hacia su archivo xaml. Esto es mucho más fácil que hacer estas otras cosas, ya que AutoCompleteBox es un control nativo.



Nimgoble''s es la versión que usé en 2015. Pensé que lo pondría aquí, ya que esta pregunta era la primera de la lista en google para "wpf autocomplete textbox"

  1. Instalar el paquete nuget para el proyecto en Visual Studio

  2. Agregue una referencia a la biblioteca en el xaml:
    xmlns:behaviors="clr-namespace:WPFTextBoxAutoComplete;assembly=WPFTextBoxAutoComplete"

  3. Cree un cuadro de texto y vincule AutoCompleteBehaviour a List<String> (TestItems):
    <TextBox Text="{Binding TestText, UpdateSourceTrigger=PropertyChanged}" behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems}" />

En mi humilde opinión, es mucho más fácil comenzar y administrar que las otras opciones enumeradas anteriormente.