2017-06-02 2 views
0

J'aimerais pouvoir dessiner des formes sur un InkCanvas. Jusqu'à présent, j'ai le XAML suivant: -Dessinez une ligne sur InkCanvas

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

Dans le constructeur de la page que je donne les résultats suivants: -

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

Et les trois événements sont les suivants: -

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) 
{ 

} 

Est là de toute façon je peux dessiner la ligne actuellement dessinée sur le selectionCanvas sur mon InkCanvas?

Merci,

Geoff

+0

Voulez-vous dessiner des formes sur '' Canvas' convertir en InkCanvas' ou dessiner des formes sur '' InkCanvas' convertir en Canvas'? –

+0

Salut Jayden, merci de votre visite. En fin de compte, je veux être en mesure de dessiner des formes sur l'InkCanvas afin de sauvegarder les formes avec tous les autres traits d'encre. – warntme

+0

Si vous voulez enregistrer les traits d'encre, il semble que vous n'ayez pas besoin d'utiliser 'Canvas'? Voulez-vous copier des traits d'encre dans 'InkCanvas'? Si c'est le cas, veuillez vous reporter au [Scénario2 de SimpleInk] (https://github.com/Microsoft/Windows-universal-samples/tree/f4e92d42dd103a7a2175ba750a89084c1c235d9a/Samples/SimpleInk). –

Répondre

0

Merci Jayden,

Cela m'a orienté dans la bonne direction. Pour être complet, voici le code de ma solution: -

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