WinRT, touch beviteli

Az egyik legígéretesebb funkciók a Windows Runtime volt, hogy megszilárdítsa az input az érintőképernyős egér és toll. Most, a fejlesztő nem kell hozzá támogatást touch beviteli meglévő alkalmazás-orientált dolgozni az egeret, vagy add egér támogatás a kérelem touch beviteli. A kezdetektől fogva, a programozó használja ezeket a beviteli forma általában csereszabatos. Összhangban a terminológia a Windows programozási felület Runtime fogom használni a „Index» (pointer), hogy jelezze a bemenet az érintőképernyő, az egér és a toll (más néven tollal) azokban az esetekben, ahol a különbséget az aktuális beviteli eszköz nem szükséges.







használja már meglévő Windows Runtime vezérli feldolgozni bemenetet a mutató a legjobb. Ahogy már láttuk, az összes szabványos vezérlők - Button, Slider, ScrollViewer, és a hüvelykujj - reagál a bemeneti az index, és ez alapján az alkalmazás átvitele bemenő adatok egy magasabb szintre. Ugyanakkor bizonyos esetekben a programozó, hogy közvetlen bemenet a mutatót. Ezekre a célokra UIElement szerint három családi eseményeket:

Nyolc alacsony szintű események nevek előtaggal kezdődnek Pointer.

Nyolc magas szintű esemény, akiknek a neve előtaggal kezdődnek manipuláció.

Események lehallgatható, RightTapped, DoubleTapped és Holding.

Az ellenőrzési osztály kiegészíti ezeket az eseményeket védett virtuális módszerek, akiknek a neve előtaggal kezdődnek On, majd az esemény nevét.

Ahhoz, hogy közreműködött a mutatót egy osztályban, amit FrameworkElement, IsHitTestVisible ingatlan kell állítani igaz, és a láthatóság tulajdonság egyenlőnek kell lennie látható. Egy osztályban, amit Ellenőrző IsEnabled ingatlan kell állítani igaz. Element kell egy grafikus ábrázolás a képernyőn; háttér osztály származó Plesk Panel, lehet átlátszó, de nem azonos null.

Mindezek az események kapcsolódnak a komponenseket az ujját, tollal vagy egérrel idején esemény bekövetkezése. Az egyetlen kivétel - a „capture” az index bejegyzést.

Bizonyos értelemben, megteheti csak az események Pointer. Például ahhoz, hogy megvalósítsa a funkció a „széthúzás” a képeket, két ujjal, figyelemmel kísérhetjük a két mutató események ezek az ujjak és becsüli a különbségeket. Azonban a számítások ilyen jellegű már végrehajtották a manipulációs eseményeket. Ezek az események egyesítik az intézkedések néhány ujját egy műveletben, ideális mozgás, nyúlik, skála, és forgassa a vizuális objektumokat.

Egyes alkalmazások közötti választás az eseményeket és Pointer manipuláció nem annyira nyilvánvaló. Valószínűleg az első jelölt kell még az esemény manipuláció - különösen, ha arra gondolt: „Remélem, a felhasználóknak nem kell használni a második ujját a fejét, mert még mindig figyelmen kívül hagyja őt.” Ha egy felhasználó két ujjal, ahol csak egy, a bemeneti több ujjal összevonásra kerül.

Azonban manipuláció események kapcsolódnak az elkerülhetetlen késés. Finger megérinti a képernyőt kell mozdulnia kissé keresete úgy értelmezték, mint része a művelet. Manipuláció események nem működnek, amikor megérinti, vagy egyszerűen megnyomja. Néha ez a késleltetés ahhoz, hogy menjen a Pointer eseményeket. Ennek egyik példája a felhasználó XYSlider ellenőrizni, hogy mi teremtjük később. A fenti változatok használják manipuláció események, mert az intézkedések néhány lábujjak ebben az összefüggésben nem szükséges. De a késleltetési idő tagadhatatlan probléma, hogy később egy másik verziót Pointer esemény látható.

Pointer eseményt generálja szintjén a window objektum CoreWindow. és akkor meg a saját eseményeket manipuláció GestureRecognizer. de korlátozza meghatározott események UIElement, és a virtuális meghatározott módszerek vezérlés. Is, akkor nem tárgyaljuk részletesen az információkat a készülék, amely beszerezhető a tér Windows.Devices.Input osztály nevét.

Pointer Események

Pointer a nyolc öt események történnek nagyon gyakran. Ha megérinti az ujját hozzáférhetőségének és láthatóságának például egy osztályban, amit UIElement, mozgatása és szüntesse meg az ujját, akkor jön létre az öt mutató események a következő sorrendben:

Események Pointer ujjlenyomatok keletkezik, ha a képernyő megérintésekor vagy felszabadul. A touch beviteli nincs olyan dolog, mint egy „útmutatást» (hover). Az egér nem ez a helyzet. Az egér eseményeket hoz PointerHoved még a gomb megnyomása nélkül. Tegyük fel, hogy hoztál az egérmutatót egy adott elem, megnyomta a gombot, mozgassa az egérgomb felengedésekor, majd mozgatni az egeret az elem határán. Elem generál a következő eseménysorozat:

Több esemény PointerPressed PointerReleased és arra is generálható lenyomásával és felengedésével különböző egér gombjait.

Most jön a tollat. Elem kezd reagálni a tollat, mielőtt a felhasználó megérinti a képernyőt, így az első esemény bekövetkezik PointerEntered, és követi a PointerMoved esemény. Amikor megérinti a képernyőt esemény generálódik PointerPressed. Mozgassa a tollat, és vedd fel. Element továbbra kiadására események PointerMoved után PointerReleased, de további toll mozgását sorozat esetén megszűnik PointerExited. Ennek eredményeként, akkor az előállított ugyanaz eseménysor, mint egy egér.







Amikor a felhasználó forgatja az egér kerék esemény generálódik PointerWheelChanged.

A maradék két esemény még ritka: PointerCaptureLost és PointerCanceled. Capture mutató később látni fogjuk, amikor a fontos az esemény PointerCaptureLost válnak nyilvánvalóvá.

Még sosem láttam események PointerCanceled - akkor is, ha az egér le van választva a számítógép, de az esemény, az átviteli ilyen hiba információkat.

PointerRoutedEventArgs osztály definiálja két közös tulajdonságai a továbbított események:

OriginalSource tulajdon jelenti az elem, amely kiváltotta az eseményt.

Kezelni a tulajdonság lehetővé teszi, hogy hagyja abba a további átirányítás az eseményeket, hanem a vizuális fa.

PointerRoutedEventArgs objektum sok hasznos információt; Az alábbi kiosztott csak fontos pont. Az osztály is meghatározza a következő feltételekkel:

Pointer Pointer ingatlan típusa.

Az ingatlan KeyModifiers. állapotát jelző kulcsok Shift, Control Menu (más néven Alt) és a Windows.

GetCurrentPoint () módszer. visszaadja egy objektum PointerPoint.

Legyen óvatos: nem vagyunk már kezd működni a Pointer osztályok (meghatározott Windows.UI.Xaml.Input névtér) és PointerPoint (meghatározott térben Windows.UI.Input nevek).

Class Pointer tartalmaz csak négy tulajdonságok:

Ez tartalmaz egy egész azonosító, amely meghatározza egy egér, egy tollat ​​vagy egyetlen ujjal.

Touch vesz értékeket, egér vagy Pen.

Logikai tulajdonság IsInRange

Meghatározza, hogy a készülék tartományon belül a képernyőn.

Logikai tulajdonság IsInContact

Ez határozza meg, hogy egy ujjal, vagy megérinti az érintőképernyőt, vagy ha az egér gomb lenyomásakor.

PointerId tulajdon döntő szerepet játszik - akkor használják, hogy nyomon kövesse a mozgásokat az egyes ujjak. A program kezeli az eseményt mutató, szinte mindig meghatározza a szókincs, amely PointerId tulajdonság a kulcs.

Ítélve a nevét, GetCurrentPoint () metódus visszaad PointerRoutedEventArgs aktuális pozícióját mutató - és valóban ez, de azon kívül, hogy az eljárás is visszaadja, sok más hasznos információ. Mivel a pozíció kényelmes számíthat egy adott elem GetCurrentPoint () metódus kap típusú argumentumot UIElement. Object PointerPoint, vissza ezzel a módszerrel előidézni az információt Pointer (PointerId tulajdonságok és IsInContact), és azt is előírja más hasznos információ:

Pont típusa, visszaadja a koordináták (x, y) idején mutató eseményeket.

ULONG típusú, időbélyeg.

PointerPointProperties meghatározott típusú Windows.UI.Input - további információkat.

Pozíció tulajdonságot mindig viszonyítva adjuk a bal felső sarokban az elem az átadandó GetCurrentPoint () metódust.

PointerRoutedEventArgs osztály is definiál módszerrel úgynevezett GetIntermediatePoints (). amely hasonló a GetCurrentPoint (), de visszatér objektumok gyűjteménye PointerPoint. Nagyon gyakran ez a gyűjtemény csak egy tárgy (ugyanaz a tárgy PointerPoint, amely visszaadja GetCurrentPoint), de egy esemény PointerMoved ilyen tárgyak lehetnek több, különösen, ha az eseménykezelő nem működik túl gyorsan. Különösen azt tapasztaltam, hogy GetIntermediatePoints visszatér Több objektum PointerPoint a Microsoft Surface tablet.

Class PointerPointProperties azonosítja 22 funkciók részletes információt nyújtanak az eseményről: jelei kattintással, jele egy gomb megnyomásával a toll teste, a lejtőn a tollat, pin téglalap ujját a képernyőn (ha rendelkezésre áll az adat), az erő nyomja az ujját vagy a tollat ​​(ha az információ rendelkezésre áll) és MouseWheelDelta . Használhatja az összes adatot a saját belátása szerint. Természetesen, bizonyos funkciók nem lesznek elérhetőek az egyes készülékek és következésképpen tartsa meg az alapértelmezett beállítás.

Egyszerű touch-alkalmazás

Valószínűleg a klasszikus multi-touch alkalmazás egy olyan program, amely lehetővé teszi, hogy dolgozzon az ujjaival a képernyőn. Írni egy ilyen programot, elegendő kezelni mind a három esemény Pointer és ellenőrzi a két tulajdonság az esemény érvek, de az eredmény egy komoly hiba, amelyet nem ellensúlyoz az egyszerűség.

MainPage.xaml projekt FingerPaint1 fájlt egyszerűen hozzárendel egy nevet az alapértelmezett Rács panel:

Először kód mögött fájl meghatároz egy szótár objektum egy kulcs típusú uint. Korábban már említettem, hogy szinte minden program, amely kezeli eseményeket Pointer tartalmaz valamilyen szótár. A tárolt adatok típusa szótárban az alkalmazástól függ; Néha az alkalmazás meghatározza egy osztály vagy szerkezet kifejezetten erre a célra. Egy egyszerű rajzoló program, minden ujját megérinti a képernyőt, levonja tárgya a vonallánc, így lehet tárolni a szótár az esetben Töröttvonal:

Az elsődleges OnPointerPressed teremt Töröttvonal tárgy és egy véletlenszerű színt. Az első pont határozza meg a helyét a mutató. Vonallánc objektumot ad a Grid panel, és a szótárban.

A további hívásokat OnPointerMoved PointerId tulajdonság azonosítja az ujját, hogy a program kérheti a vonallánc objektumot társított ujj, és helyezzen be egy új Point objektumot Töröttvonal. Mivel ez ugyanaz például ahogy a vonallánc Grid, a kijelző objektum hossza növekszik ujj mozgását.

OnPointerReleased felvezető egyszerűen eltávolítja Töröttvonal tárgyat a szótárban, eltekintve annak befejezését.

A program futtatása és többet költenek ujját a képernyőn:

WinRT, touch beviteli

Minden ujj húz saját vonal egymáshoz kapcsolódó pontok egy bizonyos színt. Festeni, akkor az egér és a toll.

Korábban már említettem, hogy ez a kód van egy hátránya. Felülbírálat OnPointerMoved OnPointerReleased és ellenőrizze, hogy van egy azonosító, amely kulcsfontosságú a szótárban, mielőtt használni, hogy hozzáférjen a szótárban. Nagyon fontos, hogy kezelni műveleteket egy egér és egy tollat, mert ezek az eszközök generálni események PointerMoved a OnPointerPressed eseményeket. De próbáld ezt: kapcsolja a program Snap View mód, húzzon egy vonalat az ujjával le az oldalt, majd vissza.

WinRT, touch beviteli

Megjegyzés az egyenes bal oldalán. Ő húzott, amikor az ujját ismét jön az oldalra, és rámutat arra, hogy a program nem kap események PointerMoved amikor az ujj megy túl. Ismételd meg a kísérletet egy egér - ugyanaz a dolog.

Most próbáljuk meg a következőket: csúsztassa az ujját a belső oldalakon sorban a külső pont és emelje fel az ujját. Aztán megint csúszik belső oldalakon. Úgy tűnik, hogy minden rendben lesz.

Most próbálja meg ugyanezt az egérrel. Kattintson a képre az egeret a lap FingerPaint1 mozgassa az egeret le az oldalt, és engedje el a gombot. Most megint az egeret az oldalt FingerPaint1. A program továbbra is felhívni a vonal, annak ellenére, hogy az egér gombját megjelent! Ez mindenképpen rossz (bár lehet, hogy már találkozott programok viselkednek hasonló módon). Ha most megnyomja az egér gombját egy kivétel, mert OnPointerPressed módszer megpróbálja felvenni a szótárba objektum a kulcs már létezik a szótárban. Eltérően a tollat ​​vagy érintéssel, minden egér esemény azonos azonosítókat. Hozzuk helyre ezeket a hiányosságokat a következő cikket.




Kapcsolódó cikkek