2017-01-10 3 views
0

Я изучаю и разрабатываю приложение для сенсорного экрана. Я попытался ниже пример кода:События манипуляции WPF не запускаются

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> 

The реализации кода позади:

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; 
     } 

    } 
} 

Но события манипулирования не уволят. Образец от here. Я использую HP TouchSmart610 монитор как мое сенсорное устройство. Есть ли какой-либо конкретный драйвер для установки событий Windows touch?

[EDIT] Я работаю удаленно, используя это HP TouchSmart610 сенсорное устройство. Это мое приложение работает на другой машине. Я сомневаюсь, что это может быть причиной. Не уверен. Есть идеи?

+1

Вы не прикрепить обработчик манипуляции событий к вашему окну (или там, где они предназначены для присоединения). На самом деле пример в TutorialsPoint нарушен. – Clemens

ответ

0

Вы забыли прикрепило ManipulationStarting, ManipulationDelta и ManipulationInertiaStarting обработчиков событий в окно:

<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"> 

оригинальный образец можно увидеть здесь: Walkthrough: Creating Your First Touch Application

Смежные вопросы