Domanda

Ho un ListView con una dozzina di righe rilegati in xml. Mi piacerebbe avere la possibilità di individuare e posizionare il cursore su un determinato record. Per esempio: Ho un con questi ID, Nome, Valore:

1, Johny, Cash, USA
2, Jean-Michel, Jarre, France
3, Jeanette, , USA

Quando avrei digitare "Je", il SelectedRow sarebbe posizionata per ID 2. Quando avrei digitare "Jeane", il SelectedRow sarebbe posizionata per ID 3. Semplicemente mi piacerebbe avere la possibilità di cercare e andare al record corretto nel ListView. Ho iniziato a costruire il SearchString ea questo punto mi sono bloccato:

L'unica possibilità in WPF è quello di utilizzare l'evento KeyDown. Purtroppo, questo evento restituire una sorta di chiave, che non ero in grado di convertire in una stringa. Per esempio. quando premo "A", SearchString sarebbe "A". Quando io continuo a digitare "B", SearchString sarebbe "AB" ecc Quando cambia SelectedItem, SearchString sarà impostato String.Empty. Nessun KeyCode o altri beni utili / metodo è disponibile.

E qui arriva lo sfregamento testa. Come posso costruire la necessità SearchString io? Quando ho provato e.Key.ToString (), ho ottenuto le stringhe davvero divertenti - ad esempio per 0 sul tastierino numerico ottengo una chiave "Numpad0", per "" ho 'OemComma', ecc io cercavo anche il metodo TryParse a char, per la chiave '3' ottengo un valore di '#', ecc, solo funziona perfettamente solo per la lettera a alla Z, per altri tasti TryParse restituisce false.

L'unico e solo modo per risolvere questo è quello di costruire una tabella di traduzione con una lunghissima sorta di "caso e.Key.ToString () di":

"A": SearchString = SearchString + "A";
"System", SearchString = SearchString + " ";
"Numpad0", SearchString = SearchString + "0";
"ArrowUp", do nothing 

ecc ecc ecc.

Non c'è un modo più intelligente e semplice per fare questo ?? O io non vedo perché gli alberi della foresta?

È stato utile?

Soluzione

Maniglia invece PreviewTextInput. Riferimento: http: // social.msdn.microsoft.com/Forums/en-US/wpf/thread/3fcfbe53-2c72-4fec-a997-dc881d1de72a .

Modifica

Nota: Il ListView (e ListBox anche) gestisce internamente l'evento KeyDown per alcuni tasti per eseguire la selezione e la navigazione. Qui di seguito sono le chiavi che vengono gestite internamente dal ListView:

    Key.Space:
    Key.Return:
    Key.Prior:
    Key.Next:
    Key.End:
    Key.Home:
    Key.Left:
    Key.Up:
    Key.Right:
    Key.Down:

Key.Space è di particolare interesse perché quando si preme spazio su un ListView, l'evento PreviewTextInput non sarà licenziato. Quindi, per completare la soluzione, si dovrebbe aggiungere anche un gestore per l'evento ListView.PreviewKeyDown e verificare se il tasto spazio è stato premuto in modo per voi di aggiungere il testo spazi corretta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top