Silverlight Handschrift eingabe

So ganz stimmt der Betreff nicht. Ich bin aktuell am “forschen”. Mein Ziel ist es User Interfaces zu bauen abseites von Menüs oben, OK und Cancel Button unten rechts. Dann habe ich mich wieder an Bill Gates alten Traum vom Tablet PC und Stift Eingabe erinnert. So ganz nebenbei ist Touch auch nicht alles. Z.b. kann man per Touch schlecht schreiben oder zeichnen. Schon gar nicht z.B. mit Handschuhen. Das erkennt manch IPhone Besitzer in der kalten Jahreszeit im Freien gerade.

Da ich einen Tablet PC besitze (schon mein 4ter) ist es ganz leicht das umzusetzen. Schon seit Silverlight 1! gibt es das InkPresenter Steuerelement. Mein Beispiel soll eine Möglichkeit bieten am Bildschirm zu unterschreiben.

image

Das Inkepresenter Control ist einfach wie es nur sein kann. Einzig drei Events muss man noch ancodieren

 <InkPresenter Name="inkp" Background="transparent"
 Width="800" Height="400" 
              MouseLeftButtonDown="InkPresenterMouseDown" 
              MouseMove="InkPresenterMouseMove" 
              MouseLeftButtonUp="InkPresenterMouseUp">
 </InkPresenter>

Ich verpasse der geschrieben Linie (Stroke) noch eine Konturfarbe Gelb. Das sieht cool aus und liest sich auf wechselnden Untergrund wie z.B. ein Bild besser.

    Private Sub InkPresenterMouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)
        inkp.CaptureMouse()
        newStroke = New System.Windows.Ink.Stroke()
        newStroke.DrawingAttributes.OutlineColor = Colors.Yellow
        newStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(inkp))
        inkp.Strokes.Add(newStroke)

    End Sub

    Private Sub InkPresenterMouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseEventArgs)
        If Not IsNothing(newStroke) Then
            newStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(inkp))
        End If
    End Sub

    Private Sub InkPresenterMouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)
        newStroke = Nothing
        inkp.ReleaseMouseCapture()
    End Sub

Das funktioniert von Silverlight 2 bis Silverlight 4 und auch mit normaler Maus! Noch ein Wort zum Tablet PC in meinen Schulungen nutze ich das sehr oft um Skizzen zu erstellen die ich meinen Kursteilnehmern dann auch gleich digital mitgeben kann.

Kommentare sind geschlossen