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

时间:2016-12-18 18:44:55

标签: .net uwp stroke inkcanvas

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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