次の方法で共有


TouchDevice クラス

定義

タッチスクリーン上で指によって生成されるシングル タッチ入力を表します。

public ref class TouchDevice abstract : System::Windows::Input::InputDevice, System::Windows::Input::IManipulator
public abstract class TouchDevice : System.Windows.Input.InputDevice, System.Windows.Input.IManipulator
type TouchDevice = class
    inherit InputDevice
    interface IManipulator
Public MustInherit Class TouchDevice
Inherits InputDevice
Implements IManipulator
継承
実装

次の例では、タッチスクリーン上で 2 本の指をドラッグして、 Canvas に単純なパターンを作成できます。 各タッチは、 の でTouchEventArgs表されますTouchDevice。 パターンは、タッチによって提供されるタッチ ポイント間の線を描画することによって作成されます。 この例では、Windows タッチ対応の画面が必要です。

次のマークアップは、グリッド内の Canvas 中央にある で構成されるユーザー インターフェイスを作成し、タッチ イベントのイベント ハンドラーをアタッチします。

<Window x:Class="WpfTouchEventsSample.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"
                TouchDown="canvas_TouchDown"
                TouchMove="canvas_TouchMove"
                TouchUp="canvas_TouchUp" />
    </Grid>
</Window>

タッチ イベントを処理するコードを次に示します。 でCanvasTouchDeviceタッチが押されると、 が にCanvasキャプチャされます。 タッチが解除されると、 TouchDevice が解放されます。 でタッチが移動すると、 CanvasId がオンになります。 最初のタッチから移動した場合、その位置が記録されます。 移動が 2 番目のタッチから来た場合は、最初のタッチの位置から 2 番目のタッチの位置に線が描画されます。

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

namespace WpfTouchEventsSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // Variables to track the first two touch points 
        // and the ID of the first touch point.
        private Point pt1, pt2 = new Point();
        private int firstTouchId = -1;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void canvas_TouchDown(object sender, TouchEventArgs e)
        {
            Canvas _canvas = (Canvas)sender as Canvas;
            if (_canvas != null)
            {
                _canvas.Children.Clear();
                e.TouchDevice.Capture(_canvas);

                // Record the ID of the first touch point if it hasn't been recorded.
                if (firstTouchId == -1)
                    firstTouchId = e.TouchDevice.Id;
            }
        }

        private void canvas_TouchMove(object sender, TouchEventArgs e)
        {
            Canvas _canvas = (Canvas)sender as Canvas;
            if (_canvas != null)
            {
                TouchPoint tp = e.GetTouchPoint(_canvas);
                // This is the first touch point; just record its position.
                if (e.TouchDevice.Id == firstTouchId)
                {
                    pt1.X = tp.Position.X;
                    pt1.Y = tp.Position.Y;
                }
                // This is not the first touch point; draw a line from the first point to this one.
                else if (e.TouchDevice.Id != firstTouchId)
                {
                    pt2.X = tp.Position.X;
                    pt2.Y = tp.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;
                    _canvas.Children.Add(_line);
                }
            }
        }

        private void canvas_TouchUp(object sender, TouchEventArgs e)
        {
            Canvas _canvas = (Canvas)sender as Canvas;
            if (_canvas != null && e.TouchDevice.Captured == _canvas)
            {
                _canvas.ReleaseTouchCapture(e.TouchDevice);
            }
        }
    }
}
Class MainWindow
    ' Variables to track the first two touch points 
    ' and the ID of the first touch point.
    Private pt1, pt2 As Point
    Private firstTouchId As Integer = -1
    ' Touch Down
    Private Sub canvas_TouchDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchEventArgs)
        Dim _canvas As Canvas = CType(sender, Canvas)
        If (_canvas IsNot Nothing) Then
            _canvas.Children.Clear()
            e.TouchDevice.Capture(_canvas)

            ' Record the ID of the first touch point if it hasn't been recorded.
            If firstTouchId = -1 Then
                firstTouchId = e.TouchDevice.Id
            End If
        End If
    End Sub
    ' Touch Move
    Private Sub canvas_TouchMove(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchEventArgs)
        Dim _canvas As Canvas = CType(sender, Canvas)
        If (_canvas IsNot Nothing) Then
            Dim tp = e.GetTouchPoint(_canvas)
            ' This is the first touch point; just record its position.
            If e.TouchDevice.Id = firstTouchId Then
                pt1.X = tp.Position.X
                pt1.Y = tp.Position.Y

                ' This is not the first touch point; draw a line from the first point to this one.
            ElseIf e.TouchDevice.Id <> firstTouchId Then
                pt2.X = tp.Position.X
                pt2.Y = tp.Position.Y

                Dim _line As 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
                _canvas.Children.Add(_line)
            End If
        End If
    End Sub
    ' Touch Up
    Private Sub canvas_TouchUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.TouchEventArgs)
        Dim _canvas As Canvas = CType(sender, Canvas)
        If (_canvas IsNot Nothing AndAlso e.TouchDevice.Captured Is _canvas) Then
            _canvas.ReleaseTouchCapture(e.TouchDevice)

        End If
    End Sub
End Class

注釈

通常、 プロパティを TouchDevice 使用して に TouchEventArgs.TouchDevice アクセスします。 は TouchDevice 、画面上のシングル タッチを表します。 複数のタッチが存在する場合は、 プロパティを Id 使用してそれらを区別します。

注意

このクラスには、すべてのメンバーに適用されるクラス レベルでの継承要求が含まれています。 SecurityException派生クラスに完全信頼アクセス許可がない場合は、 がスローされます。 セキュリティ要求の詳細については、「 リンク要求継承要求」を参照してください。

コンストラクター

TouchDevice(Int32)

TouchDevice クラスを初期化するために、派生クラスのコンストラクターから呼び出されます。

プロパティ

ActiveSource

このデバイスの入力を報告している PresentationSource を取得します。

Captured

TouchDevice をキャプチャした要素を取得します。

CaptureMode

TouchDevice のキャプチャ ポリシーを取得します。

DirectlyOver

タッチ接触点の直下にある要素を取得します。

Dispatcher

この Dispatcher が関連付けられている DispatcherObject を取得します。

(継承元 DispatcherObject)
Id

オペレーティング システムに用意されている、TouchDevice の一意の識別子を取得します。

IsActive

デバイスがアクティブかどうかを示す値を取得します。

Target

TouchDevice から入力を受け取る要素を取得します。

メソッド

Activate()

入力メッセージング システムに TouchDevice を追加します。

Capture(IInputElement)

Element キャプチャ モードを使用して、指定した要素へのタッチをキャプチャします。

Capture(IInputElement, CaptureMode)

指定した CaptureMode を使用して、指定した要素へのタッチをキャプチャします。

CheckAccess()

呼び出し元のスレッドがこの DispatcherObject にアクセスできるかどうかを確認します。

(継承元 DispatcherObject)
Deactivate()

入力メッセージング システムから TouchDevice を削除します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetIntermediateTouchPoints(IInputElement)

派生クラスでオーバーライドされると、最新のタッチ イベントと前回のタッチ イベント間で収集されたすべてのタッチ ポイントを返します。

GetTouchPoint(IInputElement)

指定された要素に対する相対的なタッチ デバイスの現在の位置を返します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
OnCapture(IInputElement, CaptureMode)

タッチが要素にキャプチャされると呼び出されます。

OnManipulationEnded(Boolean)

操作が終了すると呼び出されます。

OnManipulationStarted()

操作が開始されると呼び出されます。

ReportDown()

タッチが要素上で押されたことを報告します。

ReportMove()

タッチが要素上を移動していることを報告します。

ReportUp()

タッチが要素から放されたことを報告します。

SetActiveSource(PresentationSource)

このデバイスの入力を報告している PresentationSource を設定します。

Synchronize()

TouchDevice に強制的にユーザー インターフェイスと基になっているタッチ ポイントを同期させます。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
VerifyAccess()

呼び出し元のスレッドがこの DispatcherObject にアクセスできるように強制します。

(継承元 DispatcherObject)

イベント

Activated

TouchDevice が入力メッセージング システムに追加されるときに発生します。

Deactivated

TouchDevice が入力メッセージング システムから削除されると発生します。

Updated

タッチ メッセージが送信されたときに発生します。

明示的なインターフェイスの実装

IManipulator.GetPosition(IInputElement)

IManipulator オブジェクトの位置を返します。

IManipulator.Id

オペレーティング システムに用意されている、TouchDevice の一意の識別子を取得します。

IManipulator.ManipulationEnded(Boolean)

操作の終了時に発生します。

適用対象