ASP.Net  »  Articoli  »  Silverlight 

Silverlight e la gestione del 'multi-touch'

di: Davide Zordan     07 Aprile 2010

Intercettare gli eventi Touch

Proviamo a costruire un primo esempio in grado di intercettare gli eventi touch generati e visualizzare le coordinate dei punti selezionati e la relativa action associata a ciascuno di essi. Per iniziare creiamo una nuova "Silverlight application" e aggiungiamo un controllo DataGrid per visualizzare le coordinate (X,Y) e l'Action dei Touch points correntemente selezionati:

Listato 1: MainPage.xaml

<UserControl x:Class="BasicMultiTouch.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
    
  <Canvas x:Name="LayoutRoot" Background="White">
    <my:DataGrid x:Name="touchPoints_DataGrid" AutoGenerateColumns="True" />
  </Canvas>
  
</UserControl>

Di seguito la definizione dell'handler per l'evento Touch.FrameReported:

Listato 2: MainPage.xaml.cs

public partial class MainPage
{
  public MainPage()
  {
    InitializeComponent();
    Touch.FrameReported += Touch_FrameReported;
  }
  
  void Touch_FrameReported(object sender, TouchFrameEventArgs e)
  {
    touchPoints_DataGrid.ItemsSource = e.GetTouchPoints(this);
    foreach (var touchPoint in e.GetTouchPoints(this))
    {
      if (touchPoint.Action == TouchAction.Up) continue;
      var point = new Ellipse()
      {
        Width = 40,
        Height = 40,
        Fill = new SolidColorBrush(Colors.Green)
      };
      
      point.SetValue(Canvas.TopProperty, touchPoint.Position.Y - 64);
      point.SetValue(Canvas.LeftProperty, touchPoint.Position.X - 64);
      LayoutRoot.Children.Add(point);
    }
  }
}

La collezione e.GetTouchPoints() permette il recupero di tutti i touchPoints correntemente selezionati dall'utente. Per ciascuno di essi è possibile verificarne lo stato (action) ovvero:

Stato (Action)Descrizione
TouchAction.Downil point è stato appena selezionato, in modo simile al tradizionale evento MouseDown
TouchAction.Upil point è stato appena rilasciato
TouchAction.Moveil point è in movimento ed è possibile recuperarne le coordinate mediante tp.Position.X, tp.Position.Y

Nell'esempio descritto, per ogni azione che sia una "Up" o "Move", andremo ad aggiungere alla nostra client-area un controllo "Ellipse" corrispondente al touch-point selezionato in modo da creare un'applicazione simile a Paint. Di seguito è disponibile l'output:

Figura 2: Analisi dei principali eventi della classeSystem.Windows.Input .Touch

Analisi dei principali eventi della classe System.Windows.Input .Touch

Guide ASP.Net

Guida Windows Azure Code Snippets

Le migliori pratiche per far girare le applicazioni "in the cloud",...

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto