WPF MVVM wirtualna klawiatura

0

Witam. Jak rozwiązać następujący problem. Mam kilka textboxów do wpisywania danych ale założenie jest takie, ze komputer nie ma klawiatury i wpisywanie danych muszę oprogramować. W poprzedniej wersji aplikacji (WinForms) to zrobiłem sobie usercontrol z buttonami jako klawisze. Zaczytywałem wszystkie pola textowe i miałem zawsze jedno oznaczone jako aktywne . Przy kliknięciu na textboxa Focus się zmieniał. A chcąc coś pisać wywoływałem dla każdego klikniętego buttona metode SendKeys.Send(moja literka). Gdzie moja literka była zapisana we właściwości tag button. I to mogłem odczytać bez problemu i dobrze to działa. Przed sendkeys miałem jeszcze wywoływany focus na aktualnym textboxie bo inaczej nic tam się nie pojawiało. To samo chciałbym zrobić w WPF i jeszcze używając MVVM. Niestety klasa nie mogę użyć w WPF klasy SendKeys. Ale ściągnąłem z NuGeta InputSimulation i wywołuje w metodzie takie polecenia
InputSimulator inp= new InputSimulator();
KeyboardSimulator keyb = new KeyboardSimulator(inp);
keyb.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_A);
Nie wiem czy to tak powinno wyglądać ale to raczej nie zadziała jak nie będę ustawiał focusa na wybranym textboxie. (Tak jak wyżej robiłem to w winformsach).
Bo jak klikam buttona to textbox automatycznie traci focus i nic się nie pojawia. A w Winforms robiłem to tak:
public void MyButtonClick(object sender, EventArgs e)
{
Button button = sender as Button;
AddKeyboard.SetFocus(); // focus na aktualny textbox
SendKeys.Send(button.Tag.ToString());
}
Jak focusować ostatnio wybrany textbox.
Oczywiście używanie klawiatury systemowej odpada

0

Takie coś mi przyszło do głowy:
Robisz MVVM, więc te Twoje TextBoxy są do czegoś zbindowane.
Idea: jak textbox dostaje focusa, to bierzesz propertisa do którego zbindowany jest textbox, i bindujesz go do swojej wirtualnej kalwiatury żeby wiedziała gdzie dodawać
zalety: zero zabawy z focusem
jak to zrobić : Attached Properties
problem : trzeba będzie jeszcze śledzić pozycję karetki w textboxie, jeśli edycja ma nastepować nie tylko na końcu

alternatywnie do Attached Properties podziedziczyć po TextBoxsie, wtedy dostęp do pozycji karetki powinnien być łatwiejszy

0

Też tak myślałem ale nie wiem jak się dostać do propertiesa do którego jest zbindowany text box i gdzie go zapisać. Tzn mógłbym po focusie do jakiegoś pola, po focusie na textboxie, jego zbingowane property name. i za pomocą refleksji dostać się do tego pola. Tylko jak w dependency prop odczytaj zbindowane property

1 użytkowników online, w tym zalogowanych: 0, gości: 1