Touch 類別

定義

提供應用程式層級的服務,這個服務會處理作業系統的多點觸控輸入,以及引發 FrameReported 事件。

C#
public static class Touch
繼承
Touch

範例

下列範例可讓您藉由將兩指拖曳到觸摸屏上,在 上 Canvas 建立簡單的模式。 每個觸控都會以 TouchDevice表示。 此圖樣是藉由繪製觸控所提供的觸控點之間的線條來建立。 此範例需要 Windows Touch 兼容畫面。

下列標記會建立使用者介面,其中包含 Canvas 中置中的 Grid

XAML
<Window x:Class="WpfTouchFrameSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="525" Width="525">
    <Grid>
        <Canvas x:Name="canvas1"
                Width="500" Height="500"
                Background="Black" />     
    </Grid>
</Window>

下列程式代碼會處理 FrameReported 事件。 當觸控按下 Canvas時,會 TouchDevice 擷取至 Canvas。 當觸控隨即解除時,會 TouchDevice 放開 。 當觸控在 之間 Canvas移動時, Id 會檢查 。 如果移動來自第一次觸控,則會記錄其位置。 如果移動來自第二個觸控,則會從第一個觸控的位置繪製線條到第二個觸控的位置。

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

namespace WpfTouchFrameSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // Variables for tracking the position of two points.
        Point pt1, pt2 = new Point();
        
        public MainWindow()
        {
            InitializeComponent();
            Touch.FrameReported += new TouchFrameEventHandler(Touch_FrameReported);
        }

        void Touch_FrameReported(object sender, TouchFrameEventArgs e)
        {
            if (this.canvas1 != null)
            {
                foreach (TouchPoint _touchPoint in e.GetTouchPoints(this.canvas1))
                {
                    if (_touchPoint.Action == TouchAction.Down)
                    {
                        // Clear the canvas and capture the touch to it.
                        this.canvas1.Children.Clear();
                        _touchPoint.TouchDevice.Capture(this.canvas1);
                    }

                    else if (_touchPoint.Action == TouchAction.Move && e.GetPrimaryTouchPoint(this.canvas1) != null)
                    {   
                        // This is the first (primary) touch point. Just record its position.
                        if (_touchPoint.TouchDevice.Id == e.GetPrimaryTouchPoint(this.canvas1).TouchDevice.Id)
                        {
                            pt1.X = _touchPoint.Position.X;
                            pt1.Y = _touchPoint.Position.Y;
                        }

                        // This is not the first touch point. Draw a line from the first point to this one.
                        else if (_touchPoint.TouchDevice.Id != e.GetPrimaryTouchPoint(this.canvas1).TouchDevice.Id)
                        {
                            pt2.X = _touchPoint.Position.X;
                            pt2.Y = _touchPoint.Position.Y;

                            Line _line = new Line();
                            _line.Stroke = new RadialGradientBrush(Colors.White, Colors.Black);
                            _line.X1 = pt1.X;
                            _line.X2 = pt2.X;
                            _line.Y1 = pt1.Y;
                            _line.Y2 = pt2.Y;
                            _line.StrokeThickness = 2;
                            this.canvas1.Children.Add(_line);
                        }
                    }

                    else if (_touchPoint.Action == TouchAction.Up)
                    {
                        // If this touch is captured to the canvas, release it.
                        if (_touchPoint.TouchDevice.Captured == this.canvas1)
                        {
                            this.canvas1.ReleaseTouchCapture(_touchPoint.TouchDevice);
                        }
                    }
                }                        
            }
        }
    }
}

備註

事件FrameReported包含在 WPF Windows Presentation Foundation () ,以支援 Silverlight 的相容性。 如果您不需要確保與 Silverlight 相容,請使用觸控事件,例如 TouchDown 、 或ContentElement上的UIElementUIElement3DTouchMove

事件 FrameReported 不會與其他 WPF 輸入事件使用相同的事件模型,例如 TouchDownTouchMove。 事件不是公開為可能透過UI物件樹狀結構路由的專案特定事件,而是 FrameReported 在應用層級處理的單一事件。 因此,您無法使用 sender 事件處理程式的 參數來判斷觸控的專案。

TouchFrameEventArgs使用取得TouchPoint與觸控事件相關的值。 TouchPoint您可以從 取得Position觸控的 ,並判斷 是否TouchActionDownMoveUp 動作。 您也可以使用 TouchPoint 取得 。 TouchDevice TouchDevice從 中,您可以判斷裝置Id,並取得所觸碰專案的相關信息。

事件

FrameReported

發生於傳送觸控訊息時。

適用於

產品 版本
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10