2017-01-10 1 views
0

J'étudie et développe une application d'écran tactile. J'ai essayé ci-dessous un exemple de code:WPF Manipulation Les événements ne sont pas déclenchés

Xaml:

<Window x:Class = "WPFMultiTouchInput.MainWindow" 
    xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local = "clr-namespace:WPFMultiTouchInput" 
    mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604"> 

    <Window.Resources> 
     <MatrixTransform x:Key = "InitialMatrixTransform"> 
     <MatrixTransform.Matrix> 
      <Matrix OffsetX = "200" OffsetY = "200"/> 
     </MatrixTransform.Matrix> 
     </MatrixTransform> 
    </Window.Resources> 

    <Canvas> 
     <Rectangle Name = "manRect" Width = "321" Height = "241" 
     RenderTransform = "{StaticResource InitialMatrixTransform}" 
     IsManipulationEnabled = "true" Canvas.Left = "-70" Canvas.Top = "-170"> 
     <Rectangle.Fill> 
      <ImageBrush ImageSource = "Images/DSC_0076.JPG"/> 
     </Rectangle.Fill> 
     </Rectangle> 
    </Canvas> 

</Window> 

La mise en œuvre du code sous-jacent:

using System.Windows; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Shapes; 

namespace WPFMultiTouchInput { 

    public partial class MainWindow : Window { 

     public MainWindow() { 
     InitializeComponent(); 
     } 

     void Window_ManipulationStarting(object sender, ManipulationStartingEventArgs e) { 
     e.ManipulationContainer = this; 
     e.Handled = true; 
     } 

     void Window_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) { 
     Rectangle rectToMove = e.OriginalSource as Rectangle; 
     Matrix rectsMatrix = ((MatrixTransform)rectToMove.RenderTransform).Matrix; 

     rectsMatrix.RotateAt(e.DeltaManipulation.Rotation, e.ManipulationOrigin.X, e.ManipulationOrigin.Y); 

     rectsMatrix.ScaleAt(e.DeltaManipulation.Scale.X, e.DeltaManipulation.Scale.X, 
      e.ManipulationOrigin.X, e.ManipulationOrigin.Y); 

     rectsMatrix.Translate(e.DeltaManipulation.Translation.X, 
      e.DeltaManipulation.Translation.Y); 

     rectToMove.RenderTransform = new MatrixTransform(rectsMatrix); 
     Rect containingRect = new Rect(((FrameworkElement)e.ManipulationContainer).RenderSize); 

     Rect shapeBounds = rectToMove.RenderTransform.TransformBounds(new Rect(rectToMove.RenderSize)); 

     if (e.IsInertial && !containingRect.Contains(shapeBounds)) { 
      e.Complete(); 
     } 

     e.Handled = true; 
     } 

     void Window_InertiaStarting(object sender, ManipulationInertiaStartingEventArgs e) { 
     e.TranslationBehavior.DesiredDeceleration = 10.0 * 96.0/(1000.0 * 1000.0); 
     e.ExpansionBehavior.DesiredDeceleration = 0.1 * 96/(1000.0 * 1000.0); 
     e.RotationBehavior.DesiredDeceleration = 720/(1000.0 * 1000.0); 
     e.Handled = true; 
     } 

    } 
} 

Mais les événements de manipulation ne sont pas congédiés. L'échantillon provient de here. J'utilise HP TouchSmart610 moniteur comme mon appareil tactile. Y a-t-il un pilote spécifique à installer pour travailler sur les événements Windows Touch? Je travaille à distance en utilisant cet appareil tactile HP TouchSmart610. C'est mon application fonctionne dans une autre machine. Je doute, cela peut être une raison. Pas certain. Une idée?

+1

Vous ne joignez les gestionnaires d'événements de manipulation à votre fenêtre (ou partout où ils sont destinés à être attachés). En fait l'exemple sur TutorialsPoint est cassé. – Clemens

Répondre

0

Vous avez oublié de joint les ManipulationStarting, ManipulationDelta et ManipulationInertiaStarting gestionnaires d'événements à votre fenêtre:

<Window x:Class = "WPFMultiTouchInput.MainWindow" 
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:local = "clr-namespace:WPFMultiTouchInput" 
ManipulationStarting="Window_ManipulationStarting" 
ManipulationDelta="Window_ManipulationDelta" 
ManipulationInertiaStarting="Window_InertiaStarting" 
mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604"> 

L'échantillon original peut être vu ici: Walkthrough: Creating Your First Touch Application