語言

IncrementalHitTester.AddPoint(Point) 方法

定義

將 Point 加入至 IncrementalHitTester。

public:
 void AddPoint(System::Windows::Point point);
public void AddPoint(System.Windows.Point point);
member this.AddPoint : System.Windows.Point -> unit
Public Sub AddPoint (point As Point)

參數

point
Point

該 Point 要加到 IncrementalHitTester。

範例

以下範例示範如何在使用者用滑鼠輸入資料時,為 增加點 IncrementalHitTester 數。 範例中包含一個 StrokeHit 事件處理程序,會擦除使用者所交集的 Stroke 部分。 若要建立能讓使用者擦除墨水的控制項,請參見 「如何:在自訂控制項上擦除墨水」。

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
    base.OnMouseLeftButtonDown(e);

    if (e.StylusDevice != null)
    {
        return;
    }

    EllipseStylusShape eraserTip = new EllipseStylusShape(3, 3, 0);
    eraseTester =
        presenter.Strokes.GetIncrementalStrokeHitTester(eraserTip);
    eraseTester.StrokeHit += new StrokeHitEventHandler(eraseTester_StrokeHit);
    eraseTester.AddPoint(e.GetPosition(this));
}

protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);
    
    if (e.StylusDevice != null || eraseTester == null)
    {
        return;
    }

    if (eraseTester.IsValid)
    {
        eraseTester.AddPoint(e.GetPosition(this));
    }
}

protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
    base.OnMouseLeftButtonUp(e);

    if (e.StylusDevice != null)
    {
        return;
    }

    eraseTester.AddPoint(e.GetPosition(this));
    eraseTester.StrokeHit -= new
        StrokeHitEventHandler(eraseTester_StrokeHit);
    eraseTester.EndHitTesting();
}
Protected Overrides Sub OnMouseLeftButtonDown(ByVal e As MouseButtonEventArgs)

    MyBase.OnMouseLeftButtonDown(e)

    If Not e.StylusDevice Is Nothing Then
        Return
    End If

    Dim eraserTip As EllipseStylusShape = New EllipseStylusShape(3, 3, 0)
    eraseTester = _
        presenter.Strokes.GetIncrementalStrokeHitTester(eraserTip)
    AddHandler eraseTester.StrokeHit, _
        AddressOf eraseTester_StrokeHit
    eraseTester.AddPoint(e.GetPosition(Me))

End Sub

Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
    MyBase.OnMouseMove(e)

    If Not e.StylusDevice Is Nothing Or eraseTester Is Nothing Then
        Return
    End If

    If (eraseTester.IsValid) Then
        eraseTester.AddPoint(e.GetPosition(Me))
    End If
End Sub

Protected Overrides Sub OnMouseLeftButtonUp(ByVal e As MouseButtonEventArgs)
    MyBase.OnMouseLeftButtonUp(e)

    If Not e.StylusDevice Is Nothing Then
        Return
    End If

    eraseTester.AddPoint(e.GetPosition(Me))
    RemoveHandler eraseTester.StrokeHit, _
        AddressOf eraseTester_StrokeHit
    eraseTester.EndHitTesting()
End Sub
// When the stylus intersects a stroke, erase that part of
// the stroke.  When the stylus dissects a stoke, the 
// Stroke.Erase method returns a StrokeCollection that contains
// the two new strokes.
void eraseTester_StrokeHit(object sender,
    StrokeHitEventArgs args)
{
    StrokeCollection eraseResult =
        args.GetPointEraseResults();
    StrokeCollection strokesToReplace = new StrokeCollection();
    strokesToReplace.Add(args.HitStroke);
   
    // Replace the old stroke with the new one.
    if (eraseResult.Count > 0)
    {
        presenter.Strokes.Replace(strokesToReplace, eraseResult);
    }
    else
    {
        presenter.Strokes.Remove(strokesToReplace);
    }
}
' When the stylus intersects a stroke, erase that part of
' the stroke.  When the stylus dissects a stoke, the 
' Stroke.Erase method returns a StrokeCollection that contains
' the two new strokes.
Private Sub eraseTester_StrokeHit(ByVal sender As Object, _
        ByVal args As StrokeHitEventArgs)

    Dim eraseResult As StrokeCollection = _
        args.GetPointEraseResults()
    Dim strokesToReplace As New StrokeCollection()
    strokesToReplace.Add(args.HitStroke)

    ' Replace the old stroke with the new one.
    If eraseResult.Count > 0 Then
        presenter.Strokes.Replace(strokesToReplace, eraseResult)
    Else
        presenter.Strokes.Remove(strokesToReplace)
    End If

End Sub

適用於