2009-04-09 28 views
5

Nella schermata di accesso dell'applicazione di Silverlight, è necessario determinare se Caps Lock è attivato. Questo è abbastanza facile da gestire l'evento KeyUp o KeyDown, tuttavia come si determina se è attivato o disattivato anche se non è stato premuto un tasto?Come determinare se il Caps Lock è attivato in un'applicazione Silverlight?

Il motivo per cui desidero questo è quello che succede se l'utente non preme Caps Lock mentre l'applicazione Silverlight è in esecuzione, ma piuttosto lo ha attivato prima che arrivassero anche alla schermata di accesso? Devo ancora avvertirli che Caps Lock è attivo.

Apparentemente la gestione di codice non gestito non è possibile in Silverlight, quindi quanto segue non funziona.

[DllImport ("user32.dll")] interno statico extern short GetKeyState (int keycode);

risposta

4

Il modo per rilevare BLOC MAIUSC è controllare il KeyValue e lo Shift di KeyEventArgs.
se KeyValue è (ad esempio) "A" ma Shift è falso, quindi BLOC MAIUSC è attivo.
Non è il modo migliore, ma è il how ajax applications has been doing it.

+0

Grazie per questo. C'è un modo per determinarlo sull'evento KeyUp/KeyDown nel codice sottostante di Silverlight XAML? – Rogan

+0

sì, l'evento JavaScript e l'evento SilverLight sono molto più scadenti. Basta prendere il codice e tradurlo in C#. –

+0

Buona soluzione Shay +1 –

0

Per quanto ne so non si può. Potresti essere in grado di raccogliere la chiave andando su e giù dalla tua app, ma non saprai in quale stato si trovava se gli utenti lasciassero la tua app.

Non ho notato alcun supprt aggiuntivo per questo in SL3, ma non posso dire di averlo cercato particolarmente.

0

Silverlight non supporta il richiamo di DLL Win32 sul lato client. Quindi non è possibile utilizzare la tecnica sopra per verificare se il tasto Capslock è premuto. Hai provato a utilizzare l'evento KeyDown e a testare le chiavi di sistema? Non l'ho fatto, ma è una sensazione.

+0

Sì, KeyDown e KeyUp funzionano correttamente, tuttavia sto cercando di determinare se Caps Lock è attivato, non se è premuto. Se qualcuno attiva o disattiva Caps Lock prima di passare alla mia applicazione Silverlight, devo avvertirli che è stato attivato. – Rogan