Stroke.OnInvalidated(EventArgs) 方法

定义

引发 Invalidated 事件。

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)

参数

e
EventArgs

包含事件数据的 EventArgs

示例

下面的示例根据 Mode 属性将 绘制Stroke为实线笔划或一系列StylusPoint对象。 该示例调用 OnInvalidated 方法,该方法又调用 DrawCore 绘制笔划的 。

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

注解

如果从 Stroke 类继承,并且笔划的外观基于自定义状态,则必须调用 OnInvalidated 方法来引发 Invalidated 事件。 处理 InkPresenterInvalidated 事件并调用 DrawCore 方法。

适用于