C# 在画布上画线

C# 在画布上画线,c#,uwp,inkcanvas,C#,Uwp,Inkcanvas,我希望能够在画布上绘制形状。到目前为止,我有以下XAML:- <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Canvas x:Name="selectionCanvas" /> <InkCanvas x:Name="inker" /> </Grid> 三项活动如下:- private void StartLine(InkUnproc

我希望能够在画布上绘制形状。到目前为止,我有以下XAML:-

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Canvas x:Name="selectionCanvas" />
    <InkCanvas x:Name="inker" />
</Grid>
三项活动如下:-

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上

谢谢

杰夫

谢谢杰登

这为我指明了正确的方向。为了完整起见,以下是我的解决方案中的代码:-

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);
}
private void CompleteLine(InkUnprocessedInput发送方,PointerEventArgs参数)
{
列表点=新列表();
InkStrokeBuilder=新的InkStrokeBuilder();
墨水点pointOne=新墨水点(新点(线X1,线Y1),0.5f);
添加(第一点);
着墨点二=新着墨点(新点(第2行,第2行),0.5f);
添加(第二点);
InkStroke stroke=builder.CreateStrokeFromInkPoints(points,System.Numerics.Matrix3x2.Identity);
InkDrawingAttributes ida=inker.InkPresenter.CopyDefaultDrawingAttributes();
stroke.DrawingAttribute=ida;
inker.InkPresenter.StrokeContainer.AddStroke(笔划);
选择canvas.Children.Remove(行);
}

要在
画布上绘制形状
转换为
InkCanvas
还是在
InkCanvas
上绘制形状转换为
画布
?您好,Jayden,谢谢您的查看。最终,我希望能够在InkCanvas上绘制形状,以便与任何其他墨水笔划一起保存形状。如果要保存墨水笔划,似乎不需要使用
画布
?是否要在
InkCanvas
中复制墨水笔划?如果是这样,请参阅。否,我想做一些类似于在office中添加形状的操作,但随后将该形状渲染到InkCanvas以保存。例如,上面的代码在画布上绘制笔划开始点和结束点之间的直线。有没有办法将这一行保存到InkCanvas?我需要看另一种方法吗?或者这是不可能的?似乎我们无法将
行添加到
InkCanvas
中。我们可以通过
InkCanvas.InkPresenter.StrokeContainer.AddStroke
方法将
InkStroke
添加到
InkCanvas
。您可以参考可以插入形状的。
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);
}