แก้ไข

แชร์ผ่าน


Stroke.OnInvalidated(EventArgs) Method

Definition

Raises the Invalidated event.

protected:
 virtual void OnInvalidated(EventArgs ^ e);
protected virtual void OnInvalidated (EventArgs e);
abstract member OnInvalidated : EventArgs -> unit
override this.OnInvalidated : EventArgs -> unit
Protected Overridable Sub OnInvalidated (e As EventArgs)

Parameters

e
EventArgs

An EventArgs that contains the event data.

Examples

The following example draws a Stroke either as a solid stroke or as a series of StylusPoint objects, depending on the Mode property. The example calls the OnInvalidated method, which in turn calls the DrawCore where the stroke is drawn.

// Enumerator that specifies the drawing mode of the stroke.
public enum DrawingMode
{
    Solid,
    StyulusPoints
}
' Enumerator that specifies the drawing mode of the stroke.

Public Enum DrawingMode
    Solid
    StyulusPoints
End Enum 'DrawingMode
private DrawingMode strokeMode = DrawingMode.Solid;

// Property that specifies whether to draw a solid stroke or the stylus points
public DrawingMode Mode
{
    get
    {
        return strokeMode;
    }

     set
    {
        if (strokeMode != value)
        {
            strokeMode = value;
            this.OnInvalidated(new EventArgs());
        }
    }
}

protected override void DrawCore(System.Windows.Media.DrawingContext context, DrawingAttributes overrides)
{
    SolidColorBrush strokeBrush = new SolidColorBrush(overrides.Color);

    // If strokeMode it set to Solid, draw the strokes regularly.
    // Otherwise, draw the stylus points.
    if (strokeMode == DrawingMode.Solid)
    {
        Geometry geometry = GetGeometry(overrides);
        context.DrawGeometry(strokeBrush, null, geometry);
    }
    else // strokeMode == DrawingMode.StylusPoints
    {
        StylusPointCollection points;

        // Get the stylus points used to draw the stroke.  The points used depends on
        // the value of FitToCurve.
        if (this.DrawingAttributes.FitToCurve)
        {
            points = this.GetBezierStylusPoints();
        }
        else
        {
            points = this.StylusPoints;
        }

        // Draw a circle at each stylus point.
        foreach (StylusPoint p in points)
        {
            context.DrawEllipse(null, new Pen(strokeBrush, 1), (Point)p, 5, 5);
        }
    }
}
Private strokeMode As DrawingMode = DrawingMode.Solid

' Property that specifies whether to draw a solid stroke or the stylus points
Public Property Mode() As DrawingMode

    Get
        Return strokeMode
    End Get

    Set(ByVal value As DrawingMode)
        If strokeMode <> value Then
            strokeMode = value
            Me.OnInvalidated(New EventArgs())
        End If
    End Set

End Property


Protected Overrides Sub DrawCore(ByVal context As System.Windows.Media.DrawingContext, _
            ByVal overridedAttributes As DrawingAttributes)
    Dim strokeBrush As New SolidColorBrush(overridedAttributes.Color)

    ' If strokeMode it set to Solid, draw the strokes regularly.
    ' Otherwise, draw the stylus points.
    If strokeMode = DrawingMode.Solid Then
        Dim geometry As Geometry = GetGeometry(overridedAttributes)
        context.DrawGeometry(strokeBrush, Nothing, geometry)
        ' strokeMode == DrawingMode.StylusPoints
    Else
        Dim points As StylusPointCollection

        ' Get the stylus points used to draw the stroke.  The points used depends on
        ' the value of FitToCurve.
        If Me.DrawingAttributes.FitToCurve Then
            points = Me.GetBezierStylusPoints()
        Else
            points = Me.StylusPoints
        End If

        ' Draw a circle at each stylus point.
        Dim p As StylusPoint
        For Each p In points
            context.DrawEllipse(Nothing, New Pen(strokeBrush, 1), CType(p, Point), 5, 5)
        Next p
    End If

End Sub

Remarks

If you inherit from the Stroke class and your stroke's appearance is based on a custom state, you must call the OnInvalidated method to raise the Invalidated event. The InkPresenter handles the Invalidated event and calls the DrawCore method.

Applies to