Příručka pro vývojáře pro dotykové interakce

Navrhněte aplikaci s očekáváním, že dotykové ovládání bude primární metodou zadávání vašich uživatelů. Pokud používáte ovládací prvky WinUI, podpora touchpadu, myši a pera nevyžaduje žádné další programování, protože aplikace WinUI tuto funkci poskytují zdarma.

Mějte ale na paměti, že uživatelské rozhraní optimalizované pro dotykové ovládání není vždy nadřazené tradičnímu uživatelskému rozhraní. Obě poskytují výhody a nevýhody, které jsou jedinečné pro technologii a aplikaci. Při přechodu na uživatelské rozhraní zaměřené primárně na dotykové ovládání je důležité pochopit základní rozdíly mezi dotykem, touchpadem, perem/stylusem, myší a vstupem z klávesnice.

Important API: Microsoft. UI. Xaml.Input, Windows. UI. Core, Windows. Devices.Input

Mnoho zařízení má vícedotykové obrazovky, které podporují použití jednoho nebo více prstů (nebo dotykových kontaktů) jako vstupu. Dotykové kontakty a jejich pohyb se interpretují jako dotyková gesta a manipulace s nimi, aby podporovaly různé interakce uživatelů.

Windows app zahrnuje řadu různých mechanismů pro zpracování dotykového vstupu, což umožňuje vytvořit imerzivní prostředí, které můžou uživatelé zkoumat s jistotou. Tady probereme základy používání dotykového vstupu v Windows app.

Dotykové interakce vyžadují tři věci:

  • Dotykový displej.
  • Přímý kontakt (nebo přiblížení, pokud má displej senzory přiblížení a podporuje detekci přiblížení) jednoho nebo více prstů na daném displeji.
  • Pohyb dotykových kontaktů (nebo jejich nedostatek na základě prahové hodnoty času)

Vstupní data poskytovaná dotykovým senzorem můžou být následující:

  • Interpretováno jako fyzické gesto pro přímou manipulaci s jedním nebo více prvky uživatelského rozhraní, jako je posouvání, otočení, změna velikosti nebo přesunutí. (Naproti tomu se interakce s prvkem prostřednictvím jeho okna vlastností, dialogového okna nebo jiné usnadnění uživatelského rozhraní považuje za nepřímou manipulaci.)
  • Je rozpoznáván jako alternativní způsob zadávání, jako je myš nebo pero.
  • Používá se k doplnění nebo úpravě aspektů jiných vstupních metod, jako je rozmazání inkoustového tahu nakresleného perem.

Dotykové zadávání obvykle zahrnuje přímou manipulaci s prvkem na obrazovce. Prvek okamžitě reaguje na jakýkoli kontakt dotyku v jeho testovací oblasti a reaguje odpovídajícím způsobem na jakýkoli následný pohyb dotykových kontaktů, včetně odebrání.

Vlastní dotyková gesta a interakce by měly být navrženy pečlivě. Měly by být intuitivní, responzivní a zjistitelné a měly by uživatelům umožnit prozkoumávat vaši aplikaci s jistotou.

Zajistěte, aby funkce aplikace byly konzistentně vystaveny napříč všemi podporovanými vstupními typy zařízení. V případě potřeby použijte nějakou formu nepřímého vstupního režimu, jako je zadávání textu pro interakce s klávesnicí nebo prvky uživatelského rozhraní pro myš a pero.

Mějte na paměti, že tradiční vstupní zařízení (například myš a klávesnice) jsou známá a atraktivní pro mnoho uživatelů. Můžou nabízet rychlost, přesnost a hmatovou zpětnou vazbu, kterou dotyk nemůže nabídnout.

Poskytování jedinečných a výrazných prostředí interakce pro všechna vstupní zařízení bude podporovat nejširší škálu možností a preferencí, apelovat na nejširší možnou cílovou skupinu a přilákat více zákazníků k vaší aplikaci.

Porovnání požadavků na dotykové interakce

Následující tabulka uvádí některé rozdíly mezi vstupními zařízeními, která byste měli zvážit při návrhu dotykových aplikací pro Windows.

Faktor Dotykové interakce Interakce mezi myší, klávesnicí, perem a stylusem Touchpad
Přesnost Kontaktní oblast prstu je větší než jedna souřadnice x-y, což zvyšuje pravděpodobnost nechtěných aktivací příkazů. Myš a pero poskytují přesnou souřadnici x-y. Stejné jako myš.
Tvar oblasti kontaktu se během pohybu změní. Pohyby myši a tahy pera poskytují přesné souřadnice x-y. Fokus klávesnice je explicitní. Stejné jako myš.
Není k dispozici žádný kurzor myši, který by vám pomohl s cílením. Kurzor myši, kurzor pera a fokus klávesnice vám pomůžou s cílením. Stejné jako myš.
Lidská anatomie Pohyby prstů jsou nepřesné, protože přímý pohyb jedním nebo více prsty je obtížné. To je způsobeno zakřivení kloubů rukou a počtem kloubů zapojených do pohybu. Je jednodušší provádět přímý pohyb myší nebo perem, protože ruka, která je řídí, cestuje kratší fyzickou vzdáleností než kurzor na obrazovce. Stejné jako myš.
Některé oblasti na dotykovém povrchu zobrazovacího zařízení mohou být obtížně dosažitelné z důvodu držení prstu a úchopu uživatele zařízení. Myš a pero se můžou dostat na libovolnou část obrazovky, zatímco ovládání by mělo být přístupné pomocí klávesnice prostřednictvím pořadí ovládacích prvků. Držení prstů a úchop může být problém.
Objekty mohou být zakryty jedním nebo více prsty nebo rukou uživatele. To se označuje jako okluze. Nepřímá vstupní zařízení nezpůsobují okluzi. Stejné jako myš.
Stav objektu Dotykové ovládání používá dvoustavový model: dotykový povrch zobrazovacího zařízení je buď dotknutý (zapnuto), nebo není (vypnuto). Neexistuje žádný stav při najetí myší, který by mohl vyvolat další vizuální zpětnou vazbu. Myš, pero/stylus a klávesnice u všech vystavují model se třemi stavy: vypnuto (nahoru), zapnuto (dolů) a vznášení (fokus).
Přejetí myší umožňuje uživatelům prozkoumávat a učit se prostřednictvím nápověd přidružených k prvkům uživatelského rozhraní. Efekty najetí myší a fokusu mohou naznačovat, které objekty jsou interaktivní, a také usnadňují zaměřování.
Stejné jako myš.
Bohatá interakce Podporuje vícedotykové ovládání: několik dotykových bodů (prstů) na dotykovém povrchu. Podporuje jeden vstupní bod. Stejně jako dotykové ovládání.
Podporuje přímou manipulaci s objekty pomocí gest, jako jsou klepnutí, přetažení, posunutí, sevření a otáčení. Neexistuje podpora pro přímou manipulaci, protože myš, pero/stylus a klávesnice jsou nepřímá vstupní zařízení. Stejné jako myš.

Poznámka:

Nepřímý vstup měl výhodu více než 25 let zdokonalování. Funkce jako vyskakovací nápovědy při najetí myší byly navrženy tak, aby řešily prozkoumávání uživatelského rozhraní speciálně pro vstupy z touchpadu, myši, pera/stylusu a klávesnice. Podobné funkce uživatelského rozhraní byly znovu navrženy pro bohaté prostředí poskytované dotykovým vstupem, aniž by to ovlivnilo uživatelské prostředí pro tato další zařízení.

Použití dotykové zpětné vazby

Vhodná vizuální zpětná vazba během interakcí s vaší aplikací pomáhá uživatelům rozpoznat, učit se a přizpůsobovat jejich interakcím jak aplikací, tak platformou Windows. Vizuální zpětná vazba může indikovat úspěšné interakce, stav systému předávání, zlepšit smysl řízení, snížit chyby, pomoct uživatelům pochopit systém a vstupní zařízení a podpořit interakci.

Vizuální zpětná vazba je důležitá, když uživatel spoléhá na dotykové zadání pro aktivity, které vyžadují přesnost a přesnost na základě polohy. Zpětnou vazbu můžete zobrazit vždy a kdekoli, kde je zjištěn vstup dotykového ovládání, aby uživatel porozuměl všem vlastním pravidlům cílení, která jsou definovaná vaší aplikací a jeho ovládacími prvky.

Targeting

Cílení je optimalizované prostřednictvím:

  • Velikosti dotykových cílů

    Jasné pokyny pro velikost zajišťují, aby aplikace poskytovaly pohodlné uživatelské rozhraní, které obsahuje objekty a ovládací prvky, které jsou snadno a bezpečně zacílené.

  • Geometrie kontaktu

    Celá oblast kontaktu prstu určuje nejpravděpodobnější cílový objekt.

  • Scrubbing

    Položky ve skupině lze snadno znovu zaměřit přejetím prstem mezi nimi (například rádiových tlačítek). Aktuální položka se aktivuje při uvolnění dotykového ovládání.

  • Houpací

    Hustě zabalené položky (například hypertextové odkazy) se snadno přemístí tím, že přitlačíte prst pevně dolů a, aniž byste posouvali, střídavě pohybujte nad položkami. Vzhledem k okluzi se aktuální položka identifikuje prostřednictvím popisku nebo stavového řádku a aktivuje se při uvolnění dotykového ovládání.

Přesnost

Navrhněte pro nedbalé interakce pomocí:

  • Body přichycení, které mohou uživatelům usnadnit zastavení na požadovaných položkách při práci s obsahem.
  • Směrové "kolejnice", které mohou pomoci se svislým nebo vodorovným posouváním, i když se ruka pohybuje v mírném oblouku. Další informace naleznete v tématu Pokyny pro posouvání.

Okluze

Zabrání se překrytí prstů a rukou pomocí:

  • Velikost a umístění uživatelského rozhraní

    Aby prvky uživatelského rozhraní byly dostatečně velké, aby je oblast kontaktu prstem úplně nepokryla.

    Kdykoli je to možné, umístěte nabídky a automaticky otevíraná okna nad oblast kontaktu.

  • Nápověda

    Zobrazí popisy, když uživatel drží prst na objektu. To je užitečné pro popis funkčnosti objektu. Uživatel může špičkou prstu táhnout mimo objekt, aby se zabránilo vyvolání popisu.

    U malých objektů posuňte popisky tak, aby nebyly pokryty oblastí kontaktu prstu. To je užitečné pro cílení.

  • Úchyty pro přesnost

    Pokud je vyžadována přesnost (například výběr textu), použijte úchyty pro výběr, které jsou posunuty tak, aby zlepšily přesnost. Další informace najdete v tématu Pokyny o výběru textu a obrázků (aplikacemi prostředí Windows Runtime).

Načasování

Vyhněte se změnám časového režimu ve prospěch přímé manipulace. Přímá manipulace simuluje přímé fyzické zpracování objektu v reálném čase. Objekt reaguje při přesouvání prstů.

Časovaná interakce na druhé straně nastane po dotykové interakci. Časové interakce obvykle závisejí na neviditelných prahových hodnotách, jako je čas, vzdálenost nebo rychlost, a určují, jaký příkaz se má provést. Časové interakce nemají žádnou vizuální zpětnou vazbu, dokud systém neprovede akci.

Přímá manipulace poskytuje řadu výhod v průběhu časových interakcí:

  • Díky okamžité vizuální zpětné vazbě během interakcí se uživatelé cítí více zainteresovaní, jistější a soběstačnější.
  • Přímá manipulace usnadňuje prozkoumání systému, protože jsou nevratné – uživatelé můžou snadno procházet svými akcemi logickým a intuitivním způsobem.
  • Interakce, které přímo ovlivňují objekty a napodobují interakce reálného světa, jsou intuitivnější, zjistitelné a zapamatovatelné. Nespoléhají na nejasné ani abstraktní interakce.
  • Časové interakce můžou být obtížné provádět, protože uživatelé musí dosáhnout libovolných a neviditelných prahových hodnot.

Kromě toho důrazně doporučujeme následující:

  • Manipulace by neměla být rozlišena počtem použitých prstů.
  • Interakce by měly podporovat složené manipulace. Například přiblížením pomocí sevření prstů a současným posouváním prstů rozšiřujte pohled.
  • Interakce by se neměly rozlišovat podle času. Stejná interakce by měla mít stejný výsledek bez ohledu na čas potřebný k jeho provedení. Aktivace na základě času představují pro uživatele povinná zpoždění a ubírají jak z imerzivní povahy přímé manipulace, tak z pocitu odezvy systému.

    Poznámka:

    Výjimkou je, že používáte konkrétní časově uspořádané interakce, které vám pomůžou při učení a zkoumání (například stisknutí a podržení).

  • Vhodné popisy a vizuální pomůcky mají velký vliv na používání pokročilých interakcí.

Zobrazení aplikací

Vylepšete uživatelskou zkušenost prostřednictvím nastavení posouvání a zoomování v zobrazení vaší aplikace. Zobrazení aplikace určuje, jak uživatel přistupuje a manipuluje s aplikací a jejím obsahem. Zobrazení také poskytují chování, jako je setrvačnost, odražení hranice obsahu a body přichycení.

Nastavení panoramování a rolování v ovládacím prvku ScrollViewer určuje, jak uživatelé navigují v rámci jednoho zobrazení, když se obsah nevejde do zorného pole. Jedním zobrazením může být například stránka časopisu nebo knihy, struktura složek počítače, knihovna dokumentů nebo fotoalbum.

Nastavení lupy platí pro optické přiblížení (podporované ovládacím prvkem ScrollViewer) a ovládacím prvkem Sémantické přiblížení. Sémantický zoom je technika optimalizovaná pro dotykové ovládání prezentace a procházení velkých sad souvisejících dat nebo obsahu v rámci jednoho zobrazení. Funguje pomocí dvou různých režimů klasifikace nebo úrovní přiblížení. Je to analogické k posouvání a rolování v rámci jednoho zobrazení. Posouvání a rolování lze použít ve spojení se sémantickým přiblížením.

Pomocí zobrazení a událostí aplikace můžete upravit chování při posouvání a přibližování. To může poskytovat plynulejší prostředí interakce, než je možné prostřednictvím zpracování událostí ukazatele a gest.

Další informace o zobrazeních aplikace najdete v tématu Ovládací prvky, rozložení a text.

Vlastní dotykové interakce

Pokud implementujete vlastní podporu interakce, mějte na paměti, že uživatelé očekávají intuitivní prostředí zahrnující přímou interakci s prvky uživatelského rozhraní ve vaší aplikaci. Doporučujeme modelovat vlastní interakce v knihovnách ovládacích prvků platformy, aby byly věci konzistentní a zjistitelné. Ovládací prvky v těchto knihovnách poskytují kompletní prostředí interakce uživatelů, včetně standardních interakcí, animovaných fyzikálních efektů, vizuální zpětné vazby a přístupnosti. Vytvořte vlastní interakce jenom v případě, že existuje jasný, dobře definovaný požadavek a základní interakce nepodporují váš scénář.

Důležité

Windows 11 a novější

Některé interakce se třemi a čtyřmi prsty přestanou ve výchozím nastavení fungovat v aplikacích pro Windows.

Ve výchozím nastavení systém využívá interakce se třemi a čtyřmi prsty pro operace, jako je přepínání nebo minimalizace oken a změna virtuálních ploch. Vzhledem k tomu, že tyto interakce se teď zpracovávají na úrovni systému, může tato změna ovlivnit funkčnost vaší aplikace.

Pro podporu interakcí se třemi nebo čtyřmi prsty v rámci aplikace se zavedlo nové uživatelské nastavení, které určuje, jestli systém tyto interakce zpracovává nebo ne:

Bluetooth & zařízení > dotyk > "tří- a čtyřprstová dotyková gesta"

Když je nastavená možnost Zapnuto (výchozí), systém bude zpracovávat všechny interakce se třemi a čtyřmi prsty (aplikace je nebudou moct podporovat).

Když je tato možnost nastavená na Vypnuto, můžou aplikace podporovat interakce se třemi a čtyřmi prsty (systém je nezpracuje).

Pokud vaše aplikace musí tyto interakce podporovat, doporučujeme informovat uživatele o tomto nastavení a poskytnout odkaz, který spustí nastavení Windows na příslušnou stránku (ms-settings:devices-touch). Další podrobnosti najdete v tématu Spuštění nastavení systému Windows.

Pokud chcete poskytnout přizpůsobenou podporu dotykového ovládání, můžete zpracovávat různé události UIElement. Tyto události jsou seskupeny do tří úrovní abstrakce.

  • Statické události gest se aktivují po dokončení interakce. K událostem gest patří Tapnuté, Dvojité tapnutí, Pravé tapnutía Podržení.

    Události gest u konkrétních prvků můžete zakázat nastavením IsTapEnabled, IsDoubleTapEnabled, IsRightTapEnabled, a IsHoldingEnabled na false.

  • Události ukazatele, jako jsou PointerPressed a PointerMoved, poskytují podrobné informace o každý dotykový kontakt, včetně pohybu ukazatele a schopnosti rozlišovat mezi událostmi stisku a uvolnění.

    Ukazatel je obecný vstupní typ s jednotným mechanismem událostí. Zveřejňuje základní informace, jako je například pozice obrazovky, na aktivním vstupním zdroji, který může být dotykový, touchpad, myš nebo pero.

  • Události gest manipulace, například ManipulationStarted, označují probíhající interakci. Začnou fungovat, když se uživatel dotkne prvku, a přetrvávají, dokud uživatel nezvedne prsty nebo se manipulace nezruší.

    Mezi události manipulace patří vícedotykové interakce, například přiblížení, posouvání nebo otáčení, a interakce využívající údaje o setrvačnosti a rychlosti, jako je tažení. Informace poskytované událostmi manipulace neidentifikují formu provedené interakce, ale obsahují data, jako je pozice, rozdíl překladu a rychlost. Tato dotyková data můžete použít k určení typu interakce, která se má provést.

Tady je základní sada dotykových gest podporovaných rozhraním WinUI.

Název Typ Description
Klepnutí Statické gesto Jedním prstem se dotknete obrazovky a zvedne se nahoru.
Stiskněte a podržte Statické gesto Jedním prstem se dotknete obrazovky a zůstane na místě.
Snímek Manipulační gesto Jeden nebo více prstů se dotkne obrazovky a přesune se stejným směrem.
Swipe Manipulační gesto Jeden nebo více prstů se dotkne obrazovky a posune krátkou vzdálenost ve stejném směru.
Obrátit Manipulační gesto Dva nebo více prstů se dotkne obrazovky a pohybuje se ve směru hodinových ručiček nebo proti směru hodinových ručiček.
Štípnutí Manipulační gesto Dva nebo více prstů se dotkne obrazovky a přibližuje se k sobě.
Roztáhnout Manipulační gesto Dva nebo více prstů se dotknou obrazovky a oddálí se od sebe.

Události gest

Podrobnosti o jednotlivých ovládacích prvcích naleznete v tématu seznam ovládacích prvků.

Události ukazatele

Události ukazatele jsou vyvolány různými aktivními vstupními zdroji, včetně dotyku, touchpadu, pera a myši a nahrazují tradiční události myši.

Události ukazatele jsou založeny na jednom vstupním bodu (prst, pero, kurzor myši) a nepodporují interakce založené na rychlosti.

Tady je seznam událostí ukazatele a jejich souvisejícího argumentu události.

Událost nebo kurs Description
PointerPressed Nastane, když se jedním prstem dotkne obrazovky.
Uvolnění ukazatele Dojde k tomu, když je stejný dotykový kontakt zvednut.
ukazatel se pohnul Nastane, když je ukazatel přetažen přes obrazovku.
PointerEntered Nastane, když ukazatel přejde do oblasti testu zasažení prvku.
PointerExited Nastane, když ukazatel opustí oblast pro test zásahu prvku.
ZrušenoUkazatel Nastane, když dojde k neobvyklé ztrátě dotykového kontaktu.
ZtrátaZachyceníUkazatele Nastane, když zachycení ukazatele je převzato jiným prvkem.
PointerWheelChanged Nastane, když se změní hodnota kolečka myši a když je touchpad sevřen.
PointerRoutedEventArgs Poskytuje data pro všechny události ukazatele.

Následující příklad ukazuje, jak použít události PointerPressed, PointerReleaseda PointerExited pro zpracování interakce klepnutím na objekt Obdélníku.

Nejprve se v jazyce XAML (Extensible Application Markup Language) vytvoří obdélník s názvem touchRectangle .

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Rectangle Name="touchRectangle"
           Height="100" Width="200" Fill="Blue" />
</Grid>

Dále jsou určeni posluchače pro události PointerPressed, PointerReleaseda PointerExited.

MainPage::MainPage()
{
    InitializeComponent();

    // Pointer event listeners.
    touchRectangle->PointerPressed += ref new PointerEventHandler(this, &MainPage::touchRectangle_PointerPressed);
    touchRectangle->PointerReleased += ref new PointerEventHandler(this, &MainPage::touchRectangle_PointerReleased);
    touchRectangle->PointerExited += ref new PointerEventHandler(this, &MainPage::touchRectangle_PointerExited);
}
public MainPage()
{
    this.InitializeComponent();

    // Pointer event listeners.
    touchRectangle.PointerPressed += touchRectangle_PointerPressed;
    touchRectangle.PointerReleased += touchRectangle_PointerReleased;
    touchRectangle.PointerExited += touchRectangle_PointerExited;
}
Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Pointer event listeners.
    AddHandler touchRectangle.PointerPressed, AddressOf touchRectangle_PointerPressed
    AddHandler touchRectangle.PointerReleased, AddressOf Me.touchRectangle_PointerReleased
    AddHandler touchRectangle.PointerExited, AddressOf touchRectangle_PointerExited

End Sub

Nakonec obslužná rutina události PointerPressed zvýší výšku a šířku obdélníku , zatímco obslužné rutiny událostí PointerReleased a PointerExited nastaví výšku a šířku zpět na jejich výchozí hodnoty.

// Handler for pointer exited event.
void MainPage::touchRectangle_PointerExited(Object^ sender, PointerRoutedEventArgs^ e)
{
    Rectangle^ rect = (Rectangle^)sender;

    // Pointer moved outside Rectangle hit test area.
    // Reset the dimensions of the Rectangle.
    if (nullptr != rect)
    {
        rect->Width = 200;
        rect->Height = 100;
    }
}

// Handler for pointer released event.
void MainPage::touchRectangle_PointerReleased(Object^ sender, PointerRoutedEventArgs^ e)
{
    Rectangle^ rect = (Rectangle^)sender;

    // Reset the dimensions of the Rectangle.
    if (nullptr != rect)
    {
        rect->Width = 200;
        rect->Height = 100;
    }
}

// Handler for pointer pressed event.
void MainPage::touchRectangle_PointerPressed(Object^ sender, PointerRoutedEventArgs^ e)
{
    Rectangle^ rect = (Rectangle^)sender;

    // Change the dimensions of the Rectangle.
    if (nullptr != rect)
    {
        rect->Width = 250;
        rect->Height = 150;
    }
}
// Handler for pointer exited event.
private void touchRectangle_PointerExited(object sender, PointerRoutedEventArgs e)
{
    Rectangle rect = sender as Rectangle;

    // Pointer moved outside Rectangle hit test area.
    // Reset the dimensions of the Rectangle.
    if (null != rect)
    {
        rect.Width = 200;
        rect.Height = 100;
    }
}
// Handler for pointer released event.
private void touchRectangle_PointerReleased(object sender, PointerRoutedEventArgs e)
{
    Rectangle rect = sender as Rectangle;

    // Reset the dimensions of the Rectangle.
    if (null != rect)
    {
        rect.Width = 200;
        rect.Height = 100;
    }
}

// Handler for pointer pressed event.
private void touchRectangle_PointerPressed(object sender, PointerRoutedEventArgs e)
{
    Rectangle rect = sender as Rectangle;

    // Change the dimensions of the Rectangle.
    if (null != rect)
    {
        rect.Width = 250;
        rect.Height = 150;
    }
}
' Handler for pointer exited event.
Private Sub touchRectangle_PointerExited(sender As Object, e As PointerRoutedEventArgs)
    Dim rect As Rectangle = CType(sender, Rectangle)

    ' Pointer moved outside Rectangle hit test area.
    ' Reset the dimensions of the Rectangle.
    If (rect IsNot Nothing) Then
        rect.Width = 200
        rect.Height = 100
    End If
End Sub

' Handler for pointer released event.
Private Sub touchRectangle_PointerReleased(sender As Object, e As PointerRoutedEventArgs)
    Dim rect As Rectangle = CType(sender, Rectangle)

    ' Reset the dimensions of the Rectangle.
    If (rect IsNot Nothing) Then
        rect.Width = 200
        rect.Height = 100
    End If
End Sub

' Handler for pointer pressed event.
Private Sub touchRectangle_PointerPressed(sender As Object, e As PointerRoutedEventArgs)
    Dim rect As Rectangle = CType(sender, Rectangle)

    ' Change the dimensions of the Rectangle.
    If (rect IsNot Nothing) Then
        rect.Width = 250
        rect.Height = 150
    End If
End Sub

Události manipulace

Události manipulace v aplikaci použijte, pokud potřebujete podporovat více interakcí prstem nebo interakcí, které vyžadují rychlost dat.

Události manipulace můžete použít k detekci interakcí, jako je přetažení, přiblížení a podržení.

Poznámka:

Touchpad nevyvolá události manipulace. Místo toho budou události ukazování vyvolány při použití touchpadu.

Tady je seznam událostí manipulace a souvisejících argumentů událostí.

Událost nebo kurs Description
Zahájení manipulace událost Nastane při prvním vytvoření procesoru pro manipulaci.
událost ManipulationStarted Nastane, když vstupní zařízení zahájí manipulaci s UIElement.
události ManipulationDelta Nastane, když vstupní zařízení změní pozici během manipulace.
ManipulationInertiaStarting události Nastane, když vstupní zařízení ztratí kontakt s objektem UIElement během manipulace a začne setrvačnost.
události ManipulationCompleted Nastane, když je manipulace a inertnost na UIElement dokončena.
ManipulationStartingRoutedEventArgs Poskytuje data pro událost ManipulationStarting.
ManipulationStartedRoutedEventArgs Poskytuje data pro událost ManipulationStarted.
ManipulationDeltaRoutedEventArgs Poskytuje data pro událost ManipulatDelta .
ManipulationInertiaStartingRoutedEventArgs Poskytuje data pro událost ManipulationInertiaStarting.
ManipulaceVelocities Popisuje rychlost, při které dochází k manipulaci.
ManipulationCompletedRoutedEventArgs Poskytuje data pro událost ManipulationCompleted.

Gesto se skládá z řady událostí manipulace. Každé gesto začíná událostí ManipulationStarted, například když se uživatel dotkne obrazovky.

V dalším kroku se aktivuje jedna nebo více událostí ManipulationDelta. Pokud se například dotknete obrazovky a potom potáhnete prstem přes obrazovku. Nakonec je událost ManipulationCompleted vyvolána, když interakce skončí.

Poznámka:

Pokud nemáte monitor dotykové obrazovky, můžete kód události manipulace otestovat v simulátoru pomocí rozhraní myši a kolečka myši.

Následující příklad ukazuje, jak pomocí událostí ManipulationDelta zpracovat posuvní interakci na obdélníku a přesunout jej po obrazovce.

Nejprve se v XAML vytvoří obdélníktouchRectangle s výškou a šířkou 200.

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Rectangle Name="touchRectangle"
               Width="200" Height="200" Fill="Blue" 
               ManipulationMode="All"/>
</Grid>

Dále se vytvoří globální TranslateTransform s názvem dragTranslation pro překlad Obdélník. Na Obdélníku je specifikován naslouchací proces události ManipulationDelta a dragTranslation je přidán do RenderTransformobdélníku.

// Global translation transform used for changing the position of 
// the Rectangle based on input data from the touch contact.
Windows::UI::Xaml::Media::TranslateTransform^ dragTranslation;
// Global translation transform used for changing the position of 
// the Rectangle based on input data from the touch contact.
private TranslateTransform dragTranslation;
' Global translation transform used for changing the position of 
' the Rectangle based on input data from the touch contact.
Private dragTranslation As TranslateTransform
MainPage::MainPage()
{
    InitializeComponent();

    // Listener for the ManipulationDelta event.
    touchRectangle->ManipulationDelta += 
        ref new ManipulationDeltaEventHandler(
            this, 
            &MainPage::touchRectangle_ManipulationDelta);
    // New translation transform populated in 
    // the ManipulationDelta handler.
    dragTranslation = ref new TranslateTransform();
    // Apply the translation to the Rectangle.
    touchRectangle->RenderTransform = dragTranslation;
}
public MainPage()
{
    this.InitializeComponent();

    // Listener for the ManipulationDelta event.
    touchRectangle.ManipulationDelta += touchRectangle_ManipulationDelta;
    // New translation transform populated in 
    // the ManipulationDelta handler.
    dragTranslation = new TranslateTransform();
    // Apply the translation to the Rectangle.
    touchRectangle.RenderTransform = this.dragTranslation;
}
Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Listener for the ManipulationDelta event.
    AddHandler touchRectangle.ManipulationDelta,
        AddressOf testRectangle_ManipulationDelta
    ' New translation transform populated in 
    ' the ManipulationDelta handler.
    dragTranslation = New TranslateTransform()
    ' Apply the translation to the Rectangle.
    touchRectangle.RenderTransform = dragTranslation

End Sub

Nakonec se v obslužné rutině události ManipulationDelta aktualizuje pozice obdélníku pomocí TranslateTransform na vlastnosti Delta.

// Handler for the ManipulationDelta event.
// ManipulationDelta data is loaded into the
// translation transform and applied to the Rectangle.
void MainPage::touchRectangle_ManipulationDelta(Object^ sender,
    ManipulationDeltaRoutedEventArgs^ e)
{
    // Move the rectangle.
    dragTranslation->X += e->Delta.Translation.X;
    dragTranslation->Y += e->Delta.Translation.Y;
    
}
// Handler for the ManipulationDelta event.
// ManipulationDelta data is loaded into the
// translation transform and applied to the Rectangle.
void touchRectangle_ManipulationDelta(object sender,
    ManipulationDeltaRoutedEventArgs e)
{
    // Move the rectangle.
    dragTranslation.X += e.Delta.Translation.X;
    dragTranslation.Y += e.Delta.Translation.Y;
}
' Handler for the ManipulationDelta event.
' ManipulationDelta data Is loaded into the
' translation transform And applied to the Rectangle.
Private Sub testRectangle_ManipulationDelta(
    sender As Object,
    e As ManipulationDeltaRoutedEventArgs)

    ' Move the rectangle.
    dragTranslation.X = (dragTranslation.X + e.Delta.Translation.X)
    dragTranslation.Y = (dragTranslation.Y + e.Delta.Translation.Y)

End Sub

Směrované události

Zde jsou všechny události ukazatele, gest a manipulace implementovány jako směrované události. To znamená, že událost může být potenciálně zpracována jinými objekty než objekty, které původně vyvolaly událost. Následující nadřazení v objektovém stromě, jako jsou nadřazené kontejnery UIElement nebo kořenová stránka Page ve vaší aplikaci, se mohou rozhodnout tyto události zpracovat, i když původní prvek tyto události nevykonává. Naopak jakýkoli objekt, který zpracovává událost, může označit událost zpracovávanou tak, aby již nedosahoval žádného nadřazeného prvku. Další informace o konceptu směrované události a o tom, jak ovlivňuje způsob zápisu obslužných rutin pro směrované události, najdete v tématu Přehled událostí a směrovaných událostí.

Důležité

Pokud potřebujete zpracovat události ukazatele pro UIElement v posuvném zobrazení (například ScrollViewer nebo ListView), musíte explicitně zakázat podporu událostí manipulace s elementem v zobrazení voláním UIElement.CancelDirectmanipulation(). Pokud chcete v zobrazení znovu povolit události manipulace, zavolejte UIElement.TryStartDirectManipulation().

Co dělat a co nedělat

  • Návrh aplikací s dotykovou interakcí jako primární očekávaná metoda zadávání
  • Poskytnutí vizuální zpětné vazby pro interakce všech typů (dotykové ovládání, pero, myš atd.)
  • Optimalizujte cílení úpravou velikosti dotykového cíle, geometrie kontaktu, procházením a kýváním.
  • Optimalizujte přesnost použitím bodů přichycení a směrových "kolejnic".
  • Poskytněte popisky a úchyty, které vám pomůžou zlepšit přesnost dotykového ovládání pro úzce zabalené položky uživatelského rozhraní.
  • Nepoužívejte časované interakce, kdykoli je to možné (příklad vhodného použití: dotykové ovládání a podržení).
  • Nepoužívejte počet prstů, které se používají k rozlišení manipulace, kdykoli je to možné.

Samples

Archivní ukázky