2010-09-03 2 views
2

Контекст: мы используем экранную клавиатуру в киоске с сенсорным экраном, чтобы пользователи могли вводить текст. Кнопка backspace не работает, потому что System.Windows.Input.Keyboard.PrimaryDevice.ActiveSource становится нулевым.Имитация кнопки Backspace нажмите в C# с нулевым ActiveSource

Код Контекст:

if (System.Windows.Input.Keyboard.PrimaryDevice.ActiveSource != null) 
{ 
    System.Windows.Input.KeyEventArgs ke = 
     new System.Windows.Input.KeyEventArgs(
      System.Windows.Input.Keyboard.PrimaryDevice, 
      System.Windows.Input.Keyboard.PrimaryDevice.ActiveSource, 
      0, 
      System.Windows.Input.Key.Back); 
    ke.RoutedEvent = UIElement.KeyDownEvent; 
    System.Windows.Input.InputManager.Current.ProcessInput(ke); 
} 
else 
{ 
    Console.Out.WriteLine("Problemo"); 
} 

Я не могу использовать KeyEventArgs с нулевым ActiveSource и System.Windows.Forms.SendKeys.SendWait ("{BACKSPACE}") не работает.

ответ

6

Я просто подменить источник, чтобы исправить это как так:

else 
{ 
    //Hacky? Perhaps... but it works. 
    PresentationSource source = PresentationSource.FromVisual(this); 
    KeyEventArgs ke = new KeyEventArgs(
         Keyboard.PrimaryDevice, 
         source, 
         0, 
         System.Windows.Input.Key.Back); 
    ke.RoutedEvent = UIElement.KeyDownEvent; 
    System.Windows.Input.InputManager.Current.ProcessInput(ke); 
} 
Смежные вопросы