StylusPlugIn Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje wtyczkę, którą można dodać do właściwości kontrolki StylusPlugIns .
public ref class StylusPlugIn abstract
public abstract class StylusPlugIn
type StylusPlugIn = class
Public MustInherit Class StylusPlugIn
- Dziedziczenie
-
StylusPlugIn
- Pochodne
Przykłady
Poniższy przykład tworzy niestandardowy StylusPlugIn , który ogranicza atrament do określonego obszaru kontrolki.
// 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
Uwagi
Element StylusPlugIn umożliwia manipulowanie StylusPoint obiektami na osobnych wątkach. Oddzielne wątki są używane tak, aby atrament nadal renderowany jako dane wejściowe pióra tabletu, nawet jeśli aplikacja robi coś innego.
Aby przechwycić punkty stylu z sprzętu, utwórz klasę dziedziczą po StylusPlugIn klasie. Klasa StylusPlugIn ma następujące metody, które można zastąpić w celu manipulowania StylusPoint obiektami w wątku w puli wątków pióra.
Dane wejściowe pióra są kierowane do elementu StylusPlugIn w wątku pióra. Ponieważ nie można przeprowadzić dokładnego testowania trafień w wątku pióra, niektóre elementy mogą od czasu do czasu otrzymywać dane wejściowe stylu przeznaczone dla innych elementów. Jeśli musisz upewnić się, że dane wejściowe zostały prawidłowo kierowane przed wykonaniem operacji, zasubskrybuj i wykonaj operację w metodzie OnStylusDownProcessed, OnStylusMoveProcessedlub OnStylusUpProcessed . Te metody są wywoływane przez główny wątek aplikacji po przeprowadzeniu dokładnego testowania trafień. Aby zasubskrybować te metody, wywołaj metodę NotifyWhenProcessed w metodzie, która występuje w wątku pióra. Jeśli na przykład wywołasz metodę NotifyWhenProcessed w OnStylusMovemetodzie OnStylusMoveProcessed , wystąpi.
Uwaga
Jeśli używasz StylusPlugIn wewnątrz kontrolki, należy przetestować wtyczkę i kontrolować szeroko, aby upewnić się, że nie zgłaszają żadnych niezamierzonych wyjątków.
Użycie tekstu w języku XAML
Ta klasa nie jest zwykle używana w języku XAML.
Konstruktory
StylusPlugIn() |
Inicjuje nowe wystąpienie klasy StylusPlugIn. |
Właściwości
Element |
Pobiera element UIElement , do którego StylusPlugIn jest dołączony. |
ElementBounds |
Pobiera buforowane granice elementu. |
Enabled |
Pobiera lub ustawia, czy StylusPlugIn jest aktywny. |
IsActiveForInput |
Pobiera, czy StylusPlugIn jest w stanie zaakceptować dane wejściowe. |
Metody
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
OnAdded() |
Występuje po StylusPlugIn dodaniu elementu do elementu. |
OnEnabledChanged() |
Występuje, gdy Enabled właściwość ulegnie zmianie. |
OnIsActiveForInputChanged() |
Występuje, gdy IsActiveForInput właściwość ulegnie zmianie. |
OnRemoved() |
Występuje, gdy element StylusPlugIn zostanie usunięty z elementu. |
OnStylusDown(RawStylusInput) |
Występuje na wątku w puli wątków pióra, gdy pióro tabletu dotyka cyfryzatora. |
OnStylusDownProcessed(Object, Boolean) |
Występuje w wątku interfejsu użytkownika aplikacji (interfejs użytkownika), gdy pióro tabletu dotyka cyfryzatora. |
OnStylusEnter(RawStylusInput, Boolean) |
Występuje w wątku pióra, gdy kursor wchodzi w granice elementu. |
OnStylusLeave(RawStylusInput, Boolean) |
Występuje w wątku pióra, gdy kursor opuszcza granice elementu. |
OnStylusMove(RawStylusInput) |
Występuje na wątku pióra, gdy pióro tabletu porusza się na cyfrze. |
OnStylusMoveProcessed(Object, Boolean) |
Występuje w wątku interfejsu użytkownika aplikacji (interfejs użytkownika), gdy pióro tabletu przechodzi na cyfryzator. |
OnStylusUp(RawStylusInput) |
Występuje w wątku pióra, gdy użytkownik podnosi pióro tabletu z cyfryzatora. |
OnStylusUpProcessed(Object, Boolean) |
Występuje w wątku interfejsu użytkownika aplikacji (interfejs użytkownika), gdy użytkownik podnosi pióro tabletu z cyfryzatora. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |