C# 在画布上画线
我希望能够在画布上绘制形状。到目前为止,我有以下XAML:-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
<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);
}