通过程序从矩形内的墨水画布上选择笔画
本文关键字:墨水 笔画 选择 程序 过程 | 更新日期: 2023-09-27 18:06:23
我有一个带有笔画的InkCanvas。我希望只使用在给定区域内的笔画,或部分笔画。总之,我希望把这个区域以外的墨水都剪掉。我不知道如何正确地转换:
Rect r = new Rect(100,100,100,100);
StrokeCollection x = InkCanvas.Strokes
.Select(s => s.GetClipResult(r));
LINQ方法Select<T>()
返回IEnumerable<T>
,您试图将其分配给不是IEnumerable<T>
类型的x。所以正确的语法应该是
IEnumerable<StrokeCollection> x = InkCanvas.Strokes.Select(s => s.GetClipResult(r));
,如果你希望有第一个集合,那么x.First()或x.FirstOrDefault()将返回第一个StrokeCollection从IEnumerable<StrokeCollection>
,前者将抛出异常,如果它是空的,后者将返回null,这是默认的引用类型StrokeCollection。
检索新笔画集合中的所有笔画
LINQ可以修改为
StrokeCollection strokes = new StrokeCollection(InkCanvas.Strokes.SelectMany(s => s.GetClipResult(r)));
这将从剪辑区域检索所有笔画,并用它们创建一个新的StrokeCollection。