Para aclarar Tengo un cuadro combinado con una colección observable unido a su propiedad ItemSource. Quiero que el usuario pueda escribir solo los elementos que están presentes en la colección. manteniendo el¿Cómo limito la entrada del usuario en un cuadro combinado, De modo que u sólo puede escribir las palabras que se encuentran dentro de la colección?
IsTextSearchEnabled="true"
Funcionalidad. Así que he estado buscando en línea un ejemplo sobre cómo hacer esto. Hasta ahora pensé que debería usar el
<ComboBox TextInput="cbb1_TextInput" />
Evento y luego buscar en la colección. Pero mi intento débil no puede mantener la característica de autocompletar, el índice seleccionado se mezcla y otros comportamientos no deseados. Como soy bastante novato en wpf, me pregunto si hay soluciones que solo utilicen la parte XAML.
EDIT: he intentado algo como esto:
private void fase1cbb1_KeyUp(object sender, KeyEventArgs e)
{
ComboBox cb = (ComboBox)sender;
bool match = false;
TextBox tb = (TextBox)cb.Template.FindName("PART_EditableTextBox", cb);
if (tb.Text.Length > 0)
{
foreach (MenuItem MI in cb.Items)
{
if (MI.Text.StartsWith(tb.Text))
{
match = true; ;
}
}
if (!match)
{
int len = tb.Text.Length;
if (len > 0)
{
tb.Text = tb.Text.Substring(0, len - 1);
tb.SelectionStart = len;
}
}
}
}
Pero tan pronto como no existe ninguna coincidencia ya no hay más elemento seleccionado, y no más de autocompletar/TEXTSEARCH.
thnx para cualquier consejo o ejemplos.
SOLUCIÓN: WPF ComboBox with IsEditable="True" - How can I indicate that no match was found?
Yo no usaría el evento KeyUp. ¿No hay un BeforeValueChange o algo como esto? (no estoy seguro, la mayoría de las veces uso infragistics). Si es así, puedes verificar si el nuevo texto coincide con un elemento. Si no lo hace, cancela el evento de cambio de texto. – Tipx