MouseLeftButtonDown și MouseLeftButtonUp. Dar, în acest caz, nu primesc nici
beneficii. Utilizatorul este mai convenabil de a lucra cu o aplicație proiectată special pentru intrare touch, m. E. După ce, de exemplu, sprijin gesturi.
O altă provocare în sprijinul pentru intrare tactil este faptul că majoritatea computerelor nu au ecrane tactile, ceea ce înseamnă că aplicațiile care funcționează cu intrare de atingere, va fi dificil pentru a depana pe emulator. Emulatorul convertește evenimentele mouse-ul în caz de intrare atingere, dar prin utilizarea mouse-ul pentru a emula o, de exemplu, patru atinge simultan dificil. În cazul în care computerul sau laptop-ul are un display touch screen, ar apărea dificultăți. Dacă nu, cel mai bine este de a testa intrarea tactil pe un dispozitiv reale.
Luați în considerare în primul rând procesarea simplă a evenimentelor de intrare senzoriale, apoi un eveniment la nivel înalt, la sfârșitul vorbesc despre sprijinul gesturilor.
evenimente tactil de intrare de nivel scăzut
InitializeComponent (); Touch.FrameReported + = TouchFrameReported;
void TouchFrameReported (expeditor obiect, TouchFrameEventArgs e)
Cu argumentul FrameReported TouchFrameEventArgs tipul de eveniment, puteți obține puncte la care sa făcut atingere. Argumentul tag-ul TimeStamp conține, de asemenea, de timp. care pot fi utile în tratamentul input complex. Ia punctele de contact, puteți utiliza funcțiile și GetTouchPoints
GetPrimaryTouchPoint (listare 12.2).
Listarea 12.2. Funcții GetTouchPoints și GetPrimaryTouchPoint
GetTouchPoints TouchPointCollection (UIElement relativeTo)
TouchPoint GetPrimaryTouchPoint (UIElement relativeTo)
Metoda GetTouchPoints returnează o colecție de puncte, în timp ce GetPrimaryTouchPoint se întoarce la punctul de bază. Ambele metode iau ca parametru de control, cu privire la care se calculează poziția de atingere. Dacă valoarea parametrului transmis nul. Poziția rămâne este calculată de la marginea de sus stânga a ecranului. Transferul de control ca parametru nu este specificat evenimente de procesare tactile numai pentru elementul transferat. Tratamentul se realizează întotdeauna la nivelul întregii aplicații. De aceea, dacă o simplă apăsare a fost realizată mai sus din stânga și elementul relativ la care se calculează poziția, valoarea poziției este negativă pentru ambele axe de coordonate.
În cazul în care a produs touch screen cu un singur deget, apoi atinge punctul va deveni mainstream, și că ea se va întoarce funcția GetPrimaryTouchPoint. La toate celelalte puncte, la care utilizatorul atinge ecranul simultan cu primul punct nu va mai de bază. Astfel, în cazul în care ecranul tactil la un moment dat și țineți mâna, pentru a atinge o alta, primul punct va fi cel principal. Dacă apoi eliberați degetul la primul punct, iar al doilea nu a dat drumul, atunci punctul principal nu va face, adică. Pentru a. Statutul de „miez“ nu trece de la un punct la altul.
Astfel, ambele metode de a reveni clasa TouchPoint (punctul tactil) de obiecte, ia în considerare această clasă mai mult. Clasa de TouchPoint conține următoarele proprietăți:
Acțiunea - efectul produs poate avea una dintre cele trei valori: Jos (presare), mutare (în mișcare) sau în sus (eliberare);
Poziția - coordonatele punctului de atingere;
Size - dimensiunea zonei de atingere. Emulator pentru Windows Phone nu oferă po-
Valorile Leznov ale proprietăților;
TouchDevice - vă permite să urmăriți modul în atingere cu degetul și a fost făcută de modul de control. proprietate TouchDevice.Id oferă un identificator tactil. Toate tactil au un identificator unic, făcând clic pentru a elibera. TouchDevice.DirectlyOver proprietate pentru a determina un control, direct deasupra care sa făcut legătura.
Următorul exemplu al informațiilor TOUCH va fi afișat într-o casetă de text cu numele txtTouchInfo. Crearea unui nou proiect de aplicație pentru Windows Phone, și puneți o casetă de text de pe pagina de start MainPage.xaml (lis-
Listarea 12.3. Markup pentru blocul de text
Înscrie-te pentru un eveniment de atingere Touch.FrameReported. În tratare a evenimentului obține informații despre Kasane în caseta de text (a se vedea Listarea 12.4).
Listarea 12.4. Afișează informații despre Kasane
void TouchFrameReported (expeditor obiect, TouchFrameEventArgs e)
var sb = new StringBuilder ();
var puncte = e.GetTouchPoints (nul); în cazul în care (puncte! = null)
foreach (punct var în puncte)
sb.AppendFormat ( "Situația: x = y = Acțiune: .."
point.Position.X, point.Position.Y, point.Action);
Rulați aplicația. Faceți clic pe butonul din stânga al mouse-ului în orice moment și asigurați-vă că informațiile relevante afișate pe touch. Și anume, coordonatele atingere și acțiunea este egală în jos. Fără a elibera butonul stâng al mouse-ului și mutați-l în direcții diferite. Vor varia în coordonate, iar acțiunea este schimbat pentru a muta. Eliberați butonul din stânga al mouse-ului, și asigurați-vă că acțiunea a fost schimbat în sus.
evenimente tactil de intrare la nivel înalt
Prinde intrare atingere la nivelul întregului ansamblu destul de incomod. Luați în considerare evenimente de nivel superior, care vă permit să lucrați cu intrare de atingere la descendenții clasei UIElement. cum ar fi un nivel ListBox
Grilă sau dreptunghi. Acest eveniment:
Aceste evenimente consolida multi-atingere cu degetul la un moment dat. De asemenea, evenimentele de manipulare oferă acces la informații cu privire la viteza, cu care se poate realiza efectul de inerție.
Schimbarea paginii MainPage.xaml XAML-marcare și adăugați pătrat roșu cu numele de mainRect. care se poate deplasa în jurul ecranului (vezi Listing 12.5).
Listarea 12.5. Markup pentru pătrat roșu
Pătratul va abona la evenimente RectangleManipulationStarted
RectangleManipulationDelta și RectangleManipulationCompleted. Când atingeți pătrat
ea vopsi în culori aleatorii (vezi Listing 12.6).
Listarea 12.6. Eveniment de procesare RectangleManipulationStarted
void privat RectangleManipulationStarted (expeditor obiect, ManipulationStartedEventArgs e)
var rnd = new random ();
culoare var = Color.FromArgb (255, (byte) rnd.Next (256), (byte) rnd.Next (256), (byte) rnd.Next (256));
mainRect.Fill = new SolidColorBrush (culoare);
Apoi, da utilizatorului posibilitatea de a schimba poziția și dimensiunea pătrat (a se vedea Listarea 12.7).
Listarea 12.7. evenimente de manipulare de prelucrare
RectangleManipulationDelta privat void (expeditor obiect, ManipulationDeltaEventArgs e)
cpTransform.TranslateX + = e.DeltaManipulation.Translation.X; cpTransform.TranslateY + = e.DeltaManipulation.Translation.Y;
if ((e.DeltaManipulation.Scale.X> 0) (E.DeltaManipulation.Scale.Y> 0))
cpTransform.ScaleX * = e.DeltaManipulation.Scale.X; cpTransform.ScaleY * = e.DeltaManipulation.Scale.Y;
void privat RectangleManipulationCompleted (expeditor obiect, ManipulationCompletedEventArgs e)
În cazul RectangleManipulationDelta am stabilit parametrii transformării transferului, în conformitate cu manipularea axelor (vezi Listarea 12.8).
Listarea 12.8. Setarea parametrilor de transfer
cpTransform.TranslateX + = e.DeltaManipulation.Translation.X; cpTransform.TranslateY + = e.DeltaManipulation.Translation.Y;
Cu scalare, totul se întâmplă într-un mod similar. Dar există nuanțe. În cazul în care utilizatorul nu produce scalare, axa valoarea este zero.
Nu la scară la zero, vom verifica mai întâi valoarea scalei (lis-
Listarea 12.9. Verificați valoarea scalei
if ((e.DeltaManipulation.Scale.X> 0) (E.DeltaManipulation.Scale.Y> 0))
cpTransform.ScaleX * = e.DeltaManipulation.Scale.X; cpTransform.ScaleY * = e.DeltaManipulation.Scale.Y;
Interfața aplicației este în procesul prezentat în Fig. 12.1.
Fig. 12.1. Interfața de aplicare
-Manipulare eveniment cod manipulare, așa cum se arată în Listing 12.7, este departe de a fi ideal. Se poate îmbunătăți, de exemplu, producând o scalare cu centrul unui dreptunghi sau de scalare în ambele axe într-o singură valoare, mai degrabă decât valori diferite, ca în exemplul anterior (12,10 listare).