StylusPlugIn Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje modul plug-in, který lze přidat do vlastnosti ovládacího prvku StylusPlugIns .
public ref class StylusPlugIn abstract
public abstract class StylusPlugIn
type StylusPlugIn = class
Public MustInherit Class StylusPlugIn
- Dědičnost
-
StylusPlugIn
- Odvozené
Příklady
Následující příklad vytvoří vlastní StylusPlugIn , který omezuje rukopis na určitou oblast ovládacího prvku.
// 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
Poznámky
Umožňuje StylusPlugIn manipulovat s StylusPoint objekty na samostatných vláknech. Používají se samostatná vlákna, aby rukopis stále vykreslovat jako data pera tabletu, i když aplikace dělá něco jiného.
Pokud chcete zachytit body pera z hardwaru, vytvořte třídu, která dědí z StylusPlugIn třídy. Třída StylusPlugIn má následující metody, které můžete přepsat pro manipulaci StylusPoint s objekty ve vlákně ve fondu vláken pera.
Vstup pera se směruje na prvek StylusPlugIn ve vlákně pera. Vzhledem k tomu, že na vlákně pera nelze provádět přesné testování hitů, mohou některé prvky občas přijímat vstup pera určený pro jiné prvky. Pokud potřebujete před provedením operace správně směrovat vstup, přihlaste se k odběru OnStylusDownProcesseda provedení operace v , OnStylusMoveProcessednebo OnStylusUpProcessed metodě. Tyto metody jsou vyvolány hlavním vláknem aplikace po provedení přesného testování hit-testing. Chcete-li se přihlásit k odběru těchto metod, zavolejte NotifyWhenProcessed metodu v metodě, která se vyskytuje ve vlákně pera. Pokud například zavoláte NotifyWhenProcessed OnStylusMove, dojde k OnStylusMoveProcessed tomu.
Poznámka
Pokud používáte StylusPlugIn vnitřní ovládací prvek, měli byste modul plug-in a ovládací prvek důkladně otestovat, abyste měli jistotu, že nevyvolají žádné nezamýšlené výjimky.
Použití textu XAML
Tato třída se obvykle nepoužívá v XAML.
Konstruktory
StylusPlugIn() |
Inicializuje novou instanci StylusPlugIn třídy. |
Vlastnosti
Element |
UIElement Získá, ke kterému StylusPlugIn je připojen. |
ElementBounds |
Získá hranice uložené v mezipaměti prvku. |
Enabled |
Získá nebo nastaví, jestli StylusPlugIn je aktivní. |
IsActiveForInput |
Získá, zda StylusPlugIn je schopen přijmout vstup. |
Metody
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
GetType() |
Type Získá aktuální instanci. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří použádnou kopii aktuálního souboru Object. (Zděděno od Object) |
OnAdded() |
Nastane při StylusPlugIn přidání do elementu. |
OnEnabledChanged() |
Nastane, když se Enabled vlastnost změní. |
OnIsActiveForInputChanged() |
Nastane, když se IsActiveForInput vlastnost změní. |
OnRemoved() |
Nastane, když StylusPlugIn je odebrán z elementu. |
OnStylusDown(RawStylusInput) |
Vyskytuje se na vlákně ve fondu vláken pera, když se pero tabletu dotkne digitizátoru. |
OnStylusDownProcessed(Object, Boolean) |
Vyskytuje se ve vlákně uživatelského rozhraní aplikace (uživatelské rozhraní), když se pero tabletu dotkne digitizátoru. |
OnStylusEnter(RawStylusInput, Boolean) |
Vyskytuje se na vlákně pera, když kurzor zadá hranice prvku. |
OnStylusLeave(RawStylusInput, Boolean) |
Probíhá na vlákně pera, když kurzor opustí hranice prvku. |
OnStylusMove(RawStylusInput) |
Vyskytuje se na vlákně pera, když se pero tabletu přesune na digitizátor. |
OnStylusMoveProcessed(Object, Boolean) |
Vyskytuje se ve vlákně uživatelského rozhraní aplikace (uživatelské rozhraní), když se pero tabletu přesune na digitizátor. |
OnStylusUp(RawStylusInput) |
Nastane na vlákně pera, když uživatel zvedne pero tabletu z digitizátoru. |
OnStylusUpProcessed(Object, Boolean) |
Nastane ve vlákně uživatelského rozhraní aplikace (uživatelské rozhraní), když uživatel zvedne pero tabletu z digitizátoru. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |