Ekran Kaleminden Gelen Girişi Önleme

Mimari, System.Windows.Input.StylusPlugIns giriş ve dijital mürekkep nesnelerinin oluşturulması üzerinde düşük düzeyli denetim uygulamak için bir mekanizma StylusStroke sağlar. sınıfı, en iyi performansı elde etmek için özel davranış uygulayan ve bunutylus cihazından gelen veri StylusPlugIn akışına uygulayan bir mekanizma sağlar.

Bu konu aşağıdaki alt bölümlerden birini içerir:

Mimari

, Kalem Girişine Erişme ve Girişi Manipüle Etmeye konusunda açıklanan StylusPlugInStylusPlugInAPI'lerinin evrimidir.

Her UIElement biri StylusPlugIns bir özelliğine StylusPlugInCollection sahip. Oluşturulan verileri StylusPlugIn işlemek için StylusPlugIns öğenin StylusPoint özelliğine bir eklersiniz. StylusPoint veriler, ve nokta verileri ve veriler de dahil olmak üzere sistem dijitalleştiricisi XY tarafından desteklenen tüm özelliklerden PressureFactor oluşur.

StylusPlugInNesneleriniz, özelliğine eklerken doğrudan Stylus cihazdan gelen veri StylusPlugIn akışına StylusPlugIns eklenir. Eklentilerin koleksiyona eklenme StylusPlugIns sırası, verilerin hangi sırayla almayacaklarını StylusPoint dikte ediyor. Örneğin, girişi belirli bir bölgeyle kısıtlayan bir filtre eklentisi ekler ve ardından yazılan hareketleri tanıyan bir eklenti eklersanız, hareketleri tanıyan eklenti filtrelenmiş veriler StylusPoint alır.

Tylus Eklentilerini Uygulama

Eklentiyi uygulamak için sınıfından bir sınıf StylusPlugIn türetin. Bu sınıf, 'den gelen veri akışına Stylus uygulanır. Bu sınıfta, verilerin değerlerini StylusPoint değiştirebilirsiniz.

Dikkat

Bir özel StylusPlugIn durum oluşturur veya özel durum oluşturursa uygulama kapanır. kullanan denetimleri ayrıntılı bir şekilde test edersiniz ve yalnızca özel durum atmayacaksanız StylusPlugInStylusPlugIn bir denetim kullanabilirsiniz.

Aşağıdaki örnek, cihazdan gelen verilerde ve değerlerini değiştirerektylus girişini XYStylusPoint kısıtlayan bir eklentiyi Stylus gösterir.

using System;
using System.Windows.Media;
using System.Windows;
using System.Windows.Input.StylusPlugIns;
using System.Windows.Input;
using System.Windows.Ink;
Imports System.Windows.Media
Imports System.Windows
Imports System.Windows.Input.StylusPlugIns
Imports System.Windows.Input
Imports System.Windows.Ink
// A StylusPlugin that restricts the input area.
class FilterPlugin : StylusPlugIn
{
    protected override void OnStylusDown(RawStylusInput rawStylusInput)
    {
        // Call the base class before modifying the data.
        base.OnStylusDown(rawStylusInput);

        // Restrict the stylus input.
        Filter(rawStylusInput);
    }

    protected override void OnStylusMove(RawStylusInput rawStylusInput)
    {
        // Call the base class before modifying the data.
        base.OnStylusMove(rawStylusInput);

        // Restrict the stylus input.
        Filter(rawStylusInput);
    }

    protected override void OnStylusUp(RawStylusInput rawStylusInput)
    {
        // Call the base class before modifying the data.
        base.OnStylusUp(rawStylusInput);

        // Restrict the stylus input
        Filter(rawStylusInput);
    }

    private void Filter(RawStylusInput rawStylusInput)
    {
        // Get the StylusPoints that have come in.
        StylusPointCollection stylusPoints = rawStylusInput.GetStylusPoints();

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

        // Copy the modified StylusPoints back to the RawStylusInput.
        rawStylusInput.SetStylusPoints(stylusPoints);
    }
}
' A StylusPlugin that restricts the input area.
Class FilterPlugin
    Inherits StylusPlugIn

    Protected Overrides Sub OnStylusDown(ByVal rawStylusInput As RawStylusInput)
        ' Call the base class before modifying the data.
        MyBase.OnStylusDown(rawStylusInput)

        ' Restrict the stylus input.
        Filter(rawStylusInput)

    End Sub


    Protected Overrides Sub OnStylusMove(ByVal rawStylusInput As RawStylusInput)
        ' Call the base class before modifying the data.
        MyBase.OnStylusMove(rawStylusInput)

        ' Restrict the stylus input.
        Filter(rawStylusInput)

    End Sub


    Protected Overrides Sub OnStylusUp(ByVal rawStylusInput As RawStylusInput)
        ' Call the base class before modifying the data.
        MyBase.OnStylusUp(rawStylusInput)

        ' Restrict the stylus input
        Filter(rawStylusInput)

    End Sub


    Private Sub Filter(ByVal rawStylusInput As RawStylusInput)
        ' Get the StylusPoints that have come in.
        Dim stylusPoints As StylusPointCollection = rawStylusInput.GetStylusPoints()

        ' 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

        ' Copy the modified StylusPoints back to the RawStylusInput.
        rawStylusInput.SetStylusPoints(stylusPoints)

    End Sub
End Class

Eklentinizi InkCanvas'a Ekleme

Özel eklentinizi kullanmanın en kolay yolu, InkCanvas'tan türetilen bir sınıf uygulamak ve özelliğine StylusPlugIns eklemektir.

Aşağıdaki örnek, mürekkep InkCanvas filtreleyen bir özeli gösterir.

public class FilterInkCanvas : InkCanvas
{
    FilterPlugin filter = new FilterPlugin();

    public FilterInkCanvas()
        : base()
    {
        this.StylusPlugIns.Add(filter);
    }
}

Uygulamanıza bir ekler ve uygulamayı çalıştırsanız, kullanıcı bir vuruşu tamamlayana kadar mürekkeple bir bölgeyle sınırlı FilterInkCanvas olmadığını fark vardır. Bunun nedeni, InkCanvas ve DynamicRenderer zaten koleksiyonun üyesi olan bir StylusPlugIn özelliğine sahip StylusPlugIns olduğudur. Koleksiyona StylusPlugIn eklenen StylusPlugIns özel, verileri StylusPoint aldıktan sonra DynamicRenderer alır. Sonuç olarak, kullanıcı StylusPoint bir vuruşu sona erdirecek şekilde kalemi kaldırana kadar veriler filtrelanmaz. Kullanıcı tarafından çizilen mürekkep filtresini yapmak için öncesini FilterPlugin ekleniz DynamicRenderer gerekir.

Aşağıdaki C# kodu, çizilirken InkCanvas mürekkep filtreleyen bir özeli gösterir.

public class DynamicallyFilteredInkCanvas : InkCanvas
{
    FilterPlugin filter = new FilterPlugin();

    public DynamicallyFilteredInkCanvas()
        : base()
    {
        int dynamicRenderIndex =
            this.StylusPlugIns.IndexOf(this.DynamicRenderer);

        this.StylusPlugIns.Insert(dynamicRenderIndex, filter);
    }
}

Sonuç

Kendi sınıflarınızı türeterek ve bunları koleksiyonlara ekerek dijital mürekkep StylusPlugInStylusPlugInCollection davranışını büyük ölçüde geliştirin. Oluşturulan verilere erişebilirsiniz ve bu da size girişi StylusPoint özelleştirme fırsatı Stylus sağlar. Verilere bu kadar düşük düzeyde erişiminiz olduğundan, uygulamanıza en uygun performansla mürekkep StylusPoint toplama ve işleme gerçekleştirebilirsiniz.

Ayrıca bkz.