c# - values - Autocompletar para ComboBox en WPF en cualquier lugar del texto(no solo para comenzar)
items.add c# (6)
Tengo un ComboBox en WPF que he usado mucho (tiene una plantilla personalizada y una plantilla de artículo personalizada). Llegué al punto en el que funciona más o menos como lo quiero, excepto que cuando escribo en el ComboBox estoy haciendo el filtrado por mí, pero solo filtros suponiendo que lo que escribo comienza el nombre del artículo en el ComboBox.
Por ejemplo, si tengo un elemento en el ComboBox llamado "Windows Media Player", solo lo encontrará si empiezo a escribir "Windows Media ..." y no lo encontrará si empiezo a escribir "Media Play ..." . ¿Hay alguna forma de evitar esto? ¿Puedo establecer una propiedad en algún lugar para decirle que busque en toda la cadena en lugar de solo usar StartsWith ()?
Si no, ¿cuál sería la mejor manera de lograr que haga esto por mi cuenta? ¿Hay alguna forma de tomar el control original y, básicamente, simplemente cambiar la llamada a StartsWith () a una llamada a Contiene (), o tendría que ir mucho más bajo nivel?
Por lo que yo sé, no hay forma de obligar al ComboBox estándar a comportarse de esta manera simplemente cambiando una configuración. Por lo tanto, tendrá que implementar su propio derivado de cuadro combinado para eso o buscar un control de terceros preparado (creo que hay muchos).
El cuadro combinado de WPF no admite Autocompletar
Aquí hay una muestra que le permite hacer esto de manera indirecta, aplicando un filtro a los artículos.
Consulte http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cec1b222-2849-4a54-bcf2-03041efcf304/
Podría intentar manejar los eventos TextInput o PreviewTextInput de ComboBox, realizar la búsqueda de texto usted mismo, seleccionar el elemento más apropiado y establecer "e.Handled = true". Solo un pensamiento. ¡Espero que esto ayude!
editar:
Esto funciona para un solo personaje (es decir, si ingresas la letra "j", seleccionará el primer elemento que contenga una "j" o "J"), pero estoy seguro de que hay una manera de hacerlo con tu control. ¡Disfrutar!
private void MyComboBox_PreviewTextInput(object sender, TextCompositionEventArgs e) {
foreach (ComboBoxItem i in MyComboBox.Items) {
if (i.Content.ToString().ToUpper().Contains(e.Text.ToUpper())) {
MyComboBox.SelectedItem = i;
break;
}
}
e.Handled = true;
}
Consulte el siguiente artículo en CodeProject: Un cuadro de texto Autocompletar WPF reutilizable
El cuadro combinado ahora admite autocompletar, solo asegúrese de que en el xaml para el cuadro combinado
IsEditable="True"
Creo que esto podría ayudar. Puede cambiar el filtro según sus necesidades. De forma predeterminada, busca haciendo coincidir los contenidos de la cadena, pero puede cambiar fácilmente la condición a StartsWith si necesita ...