Der beste Weg, dies zu behandeln, ist mit Window_TextInput Ereignis statt KeyDown.
Aber wie Sie dieses Ereignis nicht gesagt, auf Ihre Anwendung nicht abfeuern kann man eher einen Hack wie folgt verwenden:
bool iscapsLock = false;
bool isShift = false;
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.CapsLock)
iscapsLock = !iscapsLock;
if (e.Key >= Key.A && e.Key <= Key.Z)
{
bool shift = isShift;
if (iscapsLock)
shift = !shift;
int s = e.Key.ToString()[0];
if (!shift)
{
s += 32;
}
Debug.Write((char)s);
}
}
Dadurch werden die Zeichen richtig gedruckt werden basierend darauf, ob capslock ein- oder ausgeschaltet ist. Der Anfangswert des Capslock kann über diesen Link abgerufen werden:
http://cboard.cprogramming.com/csharp-programming/105103-how-detect-capslock-csharp.html
Ich hoffe, das für Sie arbeitet.
seltsam, TextInput- nicht gefeuert bekommt? – olidev
@olidev Überprüfen Sie den Objektbaum, um festzustellen, ob Sie ihm das richtige UIElement anhängen. Beginnen Sie, das Ereignis an das Fenster anzuhängen, und gehen Sie dann nach unten. –
aber TextInput wird auch aus dem Code ausgelöst, möchte ich Ereignishandler nur von der Schlüsseleingabe – olidev