我正在开发一个通用的Windows平台应用程序,并希望修改Ink Canvas中存在的Ink Strokes的属性,我知道我可以访问如下:
IReadOnlyList<InkStroke> = inkCanvas.InkPresenter.StrokeContainer.GetStrokes();
编辑这些东西的大小或颜色并重新绘制它们的任何例子?
另一个问题是我怎么能有一个事件来画那些笔画? 例如,我如何实时在同一个Ink Canvas上的另一个位置绘制完全相同的笔划?
答案 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));
}
}