我有一个带有笔画的InkCanvas。我希望仅使用属于给定区域的笔划或笔划的一部分。简而言之,我希望在这个区域之外剪掉任何墨迹。我无法弄清楚如何正确地投射:
Rect r = new Rect(100,100,100,100);
StrokeCollection x = InkCanvas.Strokes
.Select(s => s.GetClipResult(r));
答案 0 :(得分:2)
LINQ方法Select<T>()
返回IEnumerable<T>
,您尝试将其分配给不是IEnumerable<T>
类型的x。所以正确的语法是
IEnumerable<StrokeCollection> x = InkCanvas.Strokes.Select(s => s.GetClipResult(r));
如果您希望必须拥有第一个集合,那么x.First()或x.FirstOrDefault()将返回IEnumerable<StrokeCollection>
中的第一个StrokeCollection,如果前者将为空,则将抛出异常,后者将返回null,这是引用类型StrokeCollection的默认值。
检索新笔划集合中的所有笔划
LINQ可以修改为
StrokeCollection strokes = new StrokeCollection(InkCanvas.Strokes.SelectMany(s => s.GetClipResult(r)));
这将从剪辑区域中检索所有笔划并使用它们创建新的StrokeCollection。