【问题标题】:Draw line onto InkCanvas在 InkCanvas 上画线
【发布时间】:2017-06-02 15:38:24
【问题描述】:

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

<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 上?

谢谢,

杰夫

【问题讨论】:

  • 您想在Canvas 上绘制形状转换为InkCanvas 还是在InkCanvas 上绘制形状转换为Canvas
  • 您好,Jayden,感谢您的收看。最终,我希望能够在 InkCanvas 上绘制形状,以便将形状与任何其他墨水笔画一起保存。
  • 如果要保存笔画,好像不用Canvas?您要复制InkCanvas 中的墨迹吗?如果有,请参考Scenario2 of SimpleInk
  • 不,我想做一些类似于在办公室添加形状的操作,然后将该形状渲染到 InkCanvas 以进行保存。例如,上面的代码在画布上在笔划开始点和结束点之间绘制一条直线。有没有办法将这条线坚持到 InkCanvas?我需要看看另一种方法吗?还是根本不可能?
  • 似乎我们无法将Line 添加到InkCanvas。我们可以通过InkCanvas.InkPresenter.StrokeContainer.AddStroke 方法将InkStroke 添加到InkCanvas。您可以参考可以插入形状的Complex inking sample

标签: c# uwp inkcanvas


【解决方案1】:

谢谢杰登,

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多