2017-06-02 34 views
0

我希望能够将图形绘制到InkCanvas上。到目前为止,我有以下XAML: -将线绘制到InkCanvas上

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

在页面构造函数中我有以下几点: -

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

和三个事件如下: -

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

} 

是无论如何,我可以将当​​前在selectionCanvas上绘制的线绘制到我的InkCanvas上?

感谢,

杰夫

+0

您是否想在'Canvas'转换为'InkCanvas'或借鉴'InkCanvas'形状绘制形状转换为'Canvas'? –

+0

嗨Jayden,谢谢你的期待。最终,我希望能够在InkCanvas上绘制形状,以便与任何其他墨迹笔画一起保存形状。 – warntme

+0

如果你想保存墨迹笔画,看起来你不需要使用'Canvas'?你想在InkCanvas中复制墨迹笔画吗?如果是这样,请参考[SimpleInk的场景2](https://github.com/Microsoft/Windows-universal-samples/tree/f4e92d42dd103a7a2175ba750a89084c1c235d9a/Samples/SimpleInk)。 –

回答

0

感谢杰登,

那我指出了正确的方向。为了完整这里是我的解决方案的代码: -

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