Stroke.OnInvalidated(EventArgs) Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
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
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.