Najlepszym sposobem na poradzenie sobie z tym problemem jest użycie zdarzenia Window_TextInput zamiast KeyDown.
Ale jak powiedział to zdarzenie nie ognia od aplikacji można używać hack raczej tak:
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);
}
}
To będzie poprawnie drukować znaki na podstawie tego, czy CapsLock jest włączony czy nie. Wartość początkowa CapsLock mogą być pobierane za pomocą tego linku:
http://cboard.cprogramming.com/csharp-programming/105103-how-detect-capslock-csharp.html
Mam nadzieję, że to działa dla Ciebie.
dziwne, TextInput nie wylecieć? – olidev
@olidev Sprawdź drzewo obiektów, aby sprawdzić, czy dołączasz je do odpowiedniego UIElement. Zacznij dołączanie zdarzenia do okna, a następnie zejdź na dół. –
ale textInput zostanie uruchomiony również z kodu, chcę uzyskać obsługę zdarzeń tylko z klucza wejściowego – olidev