如何在 .net 中修改 InkCanvas 的 InkStrokes?

How to modifying InkStrokes of an InkCanvas in .net?

我正在开发一个通用的 windows 平台应用程序,想修改 Ink Canvas 中存在的 Ink Strokes 属性,我所知道的是我可以访问如下:

IReadOnlyList<InkStroke> = inkCanvas.InkPresenter.StrokeContainer.GetStrokes();

任何编辑这些东西的大小或颜色并重新绘制它们的例子?

另一个问题是我怎样才能有一个绘制笔画的事件? 例如,我如何在同一 Ink Canvas 上的另一个位置实时绘制完全相同的笔划?

您可以通过为 InkStroke.DrawingAttributes 设置新的 InkDrawingAttributes 来重绘存在于 Ink Canvas 中的 Ink Strokes。

private void Button_Click(object sender, RoutedEventArgs e)
{
    InkDrawingAttributes attr = new InkDrawingAttributes();
    attr.Color = Colors.Red;
    attr.IgnorePressure = true;
    attr.PenTip = PenTipShape.Circle;
    attr.Size = new Size(4, 10);
    attr.PenTipTransform = Matrix3x2.CreateRotation((float)(70 * Math.PI / 180));
    IReadOnlyList<InkStroke> InkStrokeList = MyInk.InkPresenter.StrokeContainer.GetStrokes();
    foreach (InkStroke temp in InkStrokeList)
    {
        temp.DrawingAttributes = attr; 
    }          
}

当应用程序线程处理一个或多个笔划(从湿到干),然后将现有的 InkStrokes 复制到 Ink 的新点 Canvas 时,会发生 InkPresenter.StrokesCollected 事件。 您可以使用以下代码在同一 Ink Canvas 的另一个位置实时绘制完全相同的笔画。

 public MainPage()
 {
     this.InitializeComponent();
     MyInk.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Mouse | CoreInputDeviceTypes.Touch;
     MyInk.InkPresenter.StrokesCollected += InkPresenter_StrokesCollected;
 }

 private void InkPresenter_StrokesCollected(InkPresenter sender, InkStrokesCollectedEventArgs args)
 {
     foreach (var temp in args.Strokes)
     {
         temp.Selected = true;
         sender.StrokeContainer.CopySelectedToClipboard();
         sender.StrokeContainer.PasteFromClipboard(new Point(100, 100));
     }
 }