2017-06-02 7 views
0

Ich möchte in der Lage sein, Formen auf eine InkCanvas zu zeichnen. Bisher habe ich die folgende XAML: -Ziehe die Linie auf InkCanvas

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Canvas x:Name="selectionCanvas" /> 
    <InkCanvas x:Name="inker" /> 
</Grid> 

auf der Seite Konstruktor Ich habe die folgenden: -

inker.InkPresenter.UnprocessedInput.PointerPressed += StartLine; 
inker.InkPresenter.UnprocessedInput.PointerMoved += ContinueLine; 
inker.InkPresenter.UnprocessedInput.PointerReleased += CompleteLine; 
inker.InkPresenter.InputProcessingConfiguration.RightDragAction = InkInputRightDragAction.LeaveUnprocessed; 

Und die drei Ereignisse sind wie folgt: -

private void StartLine(InkUnprocessedInput sender, PointerEventArgs args) 
{ 
    line = new Line(); 
    line.X1 = args.CurrentPoint.RawPosition.X; 
    line.Y1 = args.CurrentPoint.RawPosition.Y; 
    line.X2 = args.CurrentPoint.RawPosition.X; 
    line.Y2 = args.CurrentPoint.RawPosition.Y; 

    line.Stroke = new SolidColorBrush(Colors.Purple); 
    line.StrokeThickness = 4; 
    selectionCanvas.Children.Add(line); 
} 

private void ContinueLine(InkUnprocessedInput sender, PointerEventArgs args) 
{ 
    line.X2 = args.CurrentPoint.RawPosition.X; 
    line.Y2 = args.CurrentPoint.RawPosition.Y; 

} 

private void CompleteLine(InkUnprocessedInput sender, PointerEventArgs args) 
{ 

} 

Ist kann ich die Linie, die momentan auf der selectionCanvas gezeichnet wird, trotzdem auf meine InkCanvas zeichnen?

Danke,

Geoff

+0

Wollen Sie Formen zeichnen auf 'Canvas' zu' InkCanvas' konvertieren oder ziehen Formen auf 'InkCanvas' zu' Canvas' konvertieren? –

+0

Hallo Jayden, danke fürs schauen. Letztendlich möchte ich in der Lage sein, Formen auf den InkCanvas zu zeichnen, um die Formen zusammen mit anderen Tintenstrichen zu speichern. – warntme

+0

Wenn Sie die Tintenstriche speichern möchten, müssen Sie 'Canvas' nicht verwenden? Möchten Sie Tintenstriche in der 'InkCanvas' kopieren? Wenn ja, beziehen Sie sich bitte auf [Scenario2 of SimpleInk] (https://github.com/Microsoft/Windows-universal-samples/tree/f4e92d42dd103a7a2175ba750a89084c1c235d9a/Samples/SimpleInk). –

Antwort

0

Dank Jayden,

Das hat mich in die richtige Richtung. Der Vollständigkeit halber hier ist der Code aus meiner Lösung: -

private void CompleteLine(InkUnprocessedInput sender, PointerEventArgs args) 
{ 
    List<InkPoint> points = new List<InkPoint>(); 
     InkStrokeBuilder builder = new InkStrokeBuilder(); 


     InkPoint pointOne = new InkPoint(new Point(line.X1, line.Y1), 0.5f); 
     points.Add(pointOne); 
     InkPoint pointTwo = new InkPoint(new Point(line.X2, line.Y2), 0.5f); 
     points.Add(pointTwo); 

     InkStroke stroke = builder.CreateStrokeFromInkPoints(points, System.Numerics.Matrix3x2.Identity); 
     InkDrawingAttributes ida = inker.InkPresenter.CopyDefaultDrawingAttributes(); 
     stroke.DrawingAttributes = ida; 
     inker.InkPresenter.StrokeContainer.AddStroke(stroke); 
     selectionCanvas.Children.Remove(line); 
}