StylusPlugIn Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Représente un plug-in qui peut être ajouté à la propriété StylusPlugIns d'un contrôle.
public ref class StylusPlugIn abstract
public abstract class StylusPlugIn
type StylusPlugIn = class
Public MustInherit Class StylusPlugIn
- Héritage
-
StylusPlugIn
- Dérivé
Exemples
L’exemple suivant crée un code personnalisé StylusPlugIn qui limite l’entrée manuscrite à une certaine zone sur le contrôle.
// EventArgs for the StrokeRendered event.
public class StrokeRenderedEventArgs : EventArgs
{
StylusPointCollection strokePoints;
public StrokeRenderedEventArgs(StylusPointCollection points)
{
strokePoints = points;
}
public StylusPointCollection StrokePoints
{
get
{
return strokePoints;
}
}
}
// EventHandler for the StrokeRendered event.
public delegate void StrokeRenderedEventHandler(object sender, StrokeRenderedEventArgs e);
// A StylusPlugin that restricts the input area
class FilterPlugin : StylusPlugIn
{
StylusPointCollection collectedPoints;
int currentStylus = -1;
public event StrokeRenderedEventHandler StrokeRendered;
protected override void OnStylusDown(RawStylusInput rawStylusInput)
{
// Run the base class before modifying the data
base.OnStylusDown(rawStylusInput);
if (currentStylus == -1)
{
StylusPointCollection pointsFromEvent = rawStylusInput.GetStylusPoints();
// Create an emtpy StylusPointCollection to contain the filtered
// points.
collectedPoints = new StylusPointCollection(pointsFromEvent.Description);
// Restrict the stylus input and add the filtered
// points to collectedPoints.
StylusPointCollection points = FilterPackets(pointsFromEvent);
rawStylusInput.SetStylusPoints(points);
collectedPoints.Add(points);
currentStylus = rawStylusInput.StylusDeviceId;
}
}
protected override void OnStylusMove(RawStylusInput rawStylusInput)
{
// Run the base class before modifying the data
base.OnStylusMove(rawStylusInput);
if (currentStylus == rawStylusInput.StylusDeviceId)
{
StylusPointCollection pointsFromEvent = rawStylusInput.GetStylusPoints();
// Restrict the stylus input and add the filtered
// points to collectedPoints.
StylusPointCollection points = FilterPackets(pointsFromEvent);
rawStylusInput.SetStylusPoints(points);
collectedPoints.Add(points);
}
}
protected override void OnStylusUp(RawStylusInput rawStylusInput)
{
// Run the base class before modifying the data
base.OnStylusUp(rawStylusInput);
if (currentStylus == rawStylusInput.StylusDeviceId)
{
StylusPointCollection pointsFromEvent = rawStylusInput.GetStylusPoints();
// Restrict the stylus input and add the filtered
// points to collectedPoints.
StylusPointCollection points = FilterPackets(pointsFromEvent);
rawStylusInput.SetStylusPoints(points);
collectedPoints.Add(points);
// Subscribe to the OnStylusUpProcessed method.
rawStylusInput.NotifyWhenProcessed(collectedPoints);
currentStylus = -1;
}
}
private StylusPointCollection FilterPackets(StylusPointCollection stylusPoints)
{
// Modify the (X,Y) data to move the points
// inside the acceptable input area, if necessary
for (int i = 0; i < stylusPoints.Count; i++)
{
StylusPoint sp = stylusPoints[i];
if (sp.X < 50) sp.X = 50;
if (sp.X > 250) sp.X = 250;
if (sp.Y < 50) sp.Y = 50;
if (sp.Y > 250) sp.Y = 250;
stylusPoints[i] = sp;
}
// Return the modified StylusPoints.
return stylusPoints;
}
// This is called on the application thread.
protected override void OnStylusUpProcessed(object callbackData, bool targetVerified)
{
// Check that the element actually receive the OnStylusUp input.
if (targetVerified)
{
StylusPointCollection strokePoints = callbackData as StylusPointCollection;
if (strokePoints == null)
{
return;
}
// Raise the StrokeRendered event so the consumer of the plugin can
// add the filtered stroke to its StrokeCollection.
StrokeRenderedEventArgs e = new StrokeRenderedEventArgs(strokePoints);
OnStrokeRendered(e);
}
}
protected virtual void OnStrokeRendered(StrokeRenderedEventArgs e)
{
if (StrokeRendered != null)
{
StrokeRendered(this, e);
}
}
}
' EventArgs for the StrokeRendered event.
Public Class StrokeRenderedEventArgs
Inherits EventArgs
Private currentStrokePoints As StylusPointCollection
Public Sub New(ByVal points As StylusPointCollection)
currentStrokePoints = points
End Sub
Public ReadOnly Property StrokePoints() As StylusPointCollection
Get
Return currentStrokePoints
End Get
End Property
End Class
' EventHandler for the StrokeRendered event.
Public Delegate Sub StrokeRenderedEventHandler(ByVal sender As Object, ByVal e As StrokeRenderedEventArgs)
' A StylusPlugin that restricts the input area
Class FilterPlugin
Inherits StylusPlugIn
Private collectedPoints As StylusPointCollection
Private currentStylus As Integer = -1
Public Event StrokeRendered As StrokeRenderedEventHandler
Protected Overrides Sub OnStylusDown(ByVal rawStylusInput As RawStylusInput)
' Run the base class before we modify the data
MyBase.OnStylusDown(rawStylusInput)
If currentStylus = -1 Then
Dim pointsFromEvent As StylusPointCollection = rawStylusInput.GetStylusPoints()
' Create an emtpy StylusPointCollection to contain the filtered
' points.
collectedPoints = New StylusPointCollection(pointsFromEvent.Description)
' Restrict the stylus input and add the filtered
' points to collectedPoints.
Dim points As StylusPointCollection = FilterPackets(pointsFromEvent)
rawStylusInput.SetStylusPoints(points)
collectedPoints.Add(points)
currentStylus = rawStylusInput.StylusDeviceId
End If
End Sub
Protected Overrides Sub OnStylusMove(ByVal rawStylusInput As RawStylusInput)
' Run the base class before we modify the data
MyBase.OnStylusMove(rawStylusInput)
If currentStylus = rawStylusInput.StylusDeviceId Then
Dim pointsFromEvent As StylusPointCollection = rawStylusInput.GetStylusPoints()
' Restrict the stylus input and add the filtered
' points to collectedPoints.
Dim points As StylusPointCollection = FilterPackets(pointsFromEvent)
rawStylusInput.SetStylusPoints(points)
collectedPoints.Add(points)
End If
End Sub
Protected Overrides Sub OnStylusUp(ByVal rawStylusInput As RawStylusInput)
' Run the base class before we modify the data
MyBase.OnStylusUp(rawStylusInput)
If currentStylus = rawStylusInput.StylusDeviceId Then
Dim pointsFromEvent As StylusPointCollection = rawStylusInput.GetStylusPoints()
' Restrict the stylus input and add the filtered
' points to collectedPoints.
Dim points As StylusPointCollection = FilterPackets(pointsFromEvent)
rawStylusInput.SetStylusPoints(points)
collectedPoints.Add(points)
RecordPoints(collectedPoints, "collectPoints - StylusUp")
' Subscribe to the OnStylusUpProcessed method.
rawStylusInput.NotifyWhenProcessed(collectedPoints)
currentStylus = -1
End If
End Sub
Private Function FilterPackets(ByVal stylusPoints As StylusPointCollection) As StylusPointCollection
' Modify the (X,Y) data to move the points
' inside the acceptable input area, if necessary.
Dim i As Integer
For i = 0 To stylusPoints.Count - 1
Dim sp As StylusPoint = stylusPoints(i)
If sp.X < 50 Then
sp.X = 50
End If
If sp.X > 250 Then
sp.X = 250
End If
If sp.Y < 50 Then
sp.Y = 50
End If
If sp.Y > 250 Then
sp.Y = 250
End If
stylusPoints(i) = sp
Next i
' Return the modified StylusPoints.
Return stylusPoints
End Function 'FilterPackets
' This is called on the application thread.
Protected Overrides Sub OnStylusUpProcessed(ByVal callbackData As Object, _
ByVal targetVerified As Boolean)
' Check that the element actually receive the OnStylusUp input.
If targetVerified Then
Dim strokePoints As StylusPointCollection
strokePoints = CType(callbackData, StylusPointCollection)
If strokePoints Is Nothing Then
Return
End If
' Raise the StrokeRendered event so the consumer of the plugin can
' add the filtered stroke to its StrokeCollection.
RecordPoints(strokePoints, "onStylusUpProcessed")
Dim e As New StrokeRenderedEventArgs(strokePoints)
OnStrokeRendered(e)
End If
End Sub
Protected Overridable Sub OnStrokeRendered(ByVal e As StrokeRenderedEventArgs)
RaiseEvent StrokeRendered(Me, e)
End Sub
Public Sub RecordPoints(ByVal points As StylusPointCollection, ByVal name As String)
System.Diagnostics.Debug.WriteLine(name)
For Each point As StylusPoint In points
System.Diagnostics.Debug.WriteLine(" x: " & point.X & " y: " & point.Y)
Next
End Sub
End Class
Remarques
Il StylusPlugIn vous permet de manipuler StylusPoint des objets sur des threads distincts. Les threads distincts sont utilisés afin que l’encre continue de s’afficher en tant que données de stylet tablette, même si l’application effectue quelque chose d’autre.
Pour intercepter les points de stylet du matériel, créez une classe qui hérite de la StylusPlugIn classe. La StylusPlugIn classe a les méthodes suivantes que vous pouvez remplacer pour manipuler StylusPoint des objets sur un thread dans le pool de threads de stylet.
L’entrée du stylet est routée vers un élément StylusPlugIn sur le thread de stylet. Étant donné que les tests de frappe précis ne peuvent pas être effectués sur le thread de stylet, certains éléments peuvent parfois recevoir une entrée de stylet destinée à d’autres éléments. Si vous devez vous assurer que l’entrée a été routée correctement avant d’effectuer une opération, de vous abonner et d’effectuer l’opération dans le OnStylusDownProcessed, OnStylusMoveProcessedou OnStylusUpProcessed la méthode. Ces méthodes sont appelées par le thread d’application principal après l’exécution de tests précis. Pour vous abonner à ces méthodes, appelez la NotifyWhenProcessed méthode dans la méthode qui se produit sur le thread de stylet. Par exemple, si vous appelez NotifyWhenProcessed OnStylusMove, le OnStylusMoveProcessed produit se produit.
Notes
Si vous utilisez un contrôle à l’intérieur d’un StylusPlugIn contrôle, vous devez tester le plug-in et le contrôler largement pour vous assurer qu’ils ne lèvent aucune exception inattendue.
Utilisation du texte XAML
Cette classe n’est généralement pas utilisée en XAML.
Constructeurs
StylusPlugIn() |
Initialise une nouvelle instance de la classe StylusPlugIn. |
Propriétés
Element |
Obtient le UIElement auquel le StylusPlugIn est attaché. |
ElementBounds |
Obtient les limites mises en cache de l'élément. |
Enabled |
Obtient ou définit si le StylusPlugIn est actif. |
IsActiveForInput |
Obtient l'information indiquant si le StylusPlugIn est en mesure d'accepter l'entrée. |
Méthodes
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
OnAdded() |
Se produit lorsque le StylusPlugIn est ajouté à un élément. |
OnEnabledChanged() |
Se produit quand la propriété Enabled change. |
OnIsActiveForInputChanged() |
Se produit quand la propriété IsActiveForInput change. |
OnRemoved() |
Se produit lorsque le StylusPlugIn est supprimé d'un élément. |
OnStylusDown(RawStylusInput) |
Se produit sur un thread dans le pool de threads de stylet lorsque le stylet touche le digitaliseur. |
OnStylusDownProcessed(Object, Boolean) |
Se produit sur le thread UI d'application (interface utilisateur) lorsque le stylet touche le digitaliseur. |
OnStylusEnter(RawStylusInput, Boolean) |
Se produit sur un stylet lorsque le curseur passe les limites d'un élément. |
OnStylusLeave(RawStylusInput, Boolean) |
Se produit sur un stylet lorsque le curseur quitte les limites d'un élément. |
OnStylusMove(RawStylusInput) |
Se produit sur un thread de stylet lorsque le stylet se déplace sur le digitaliseur. |
OnStylusMoveProcessed(Object, Boolean) |
Se produit sur le thread UI d'application (interface utilisateur) lorsque le stylet se déplace sur le digitaliseur. |
OnStylusUp(RawStylusInput) |
Se produit sur un thread de stylet lorsque l'utilisateur soulève le stylet du digitaliseur. |
OnStylusUpProcessed(Object, Boolean) |
Se produit sur le thread UI d'application (interface utilisateur) lorsque l'utilisateur soulève le stylet du digitaliseur. |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |