WPF MVVM wirtualna klawiatura

Odpowiedz Nowy wątek
2017-10-18 09:57

Rejestracja: 5 lat temu

Ostatnio: 2 godziny temu

Lokalizacja: Nowa Ruda

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

Pozostało 580 znaków

2017-10-18 11:13

Rejestracja: 16 lat temu

Ostatnio: 2 minuty temu

Lokalizacja: Kraków

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


It's easy to hate code you didn't write, without an understanding of the context in which it was written.
edytowany 1x, ostatnio: neves, 2017-10-18 11:18

Pozostało 580 znaków

2017-10-18 11:27

Rejestracja: 5 lat temu

Ostatnio: 2 godziny temu

Lokalizacja: Nowa Ruda

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

edytowany 1x, ostatnio: szydlak, 2017-10-18 11:32
Tak pomyślałem że może dodam do każdego textboxa eventtriger, który mi wpisze w jakimś polu typu string w ViewModelu nazwę właściwości zbindowanej, jeśli nastąpi focus kontrolki. - szydlak 2017-10-18 13:14

Pozostało 580 znaków

Odpowiedz

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