我有一个带有笔画的 InkCanvas。我希望只使用落在给定区域内的笔画或部分笔画。简而言之,我希望剪辑该区域之外的任何墨水。我不知道如何正确投射:
Rect r = new Rect(100,100,100,100);
StrokeCollection x = InkCanvas.Strokes
.Select(s => s.GetClipResult(r));
LINQ 方法Select<T>()
返回 anIEnumerable<T>
并且您试图将其分配给 x ,它不是IEnumerable<T>
类型。所以正确的语法是
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。