按程序从矩形内的墨迹中选择笔划

时间:2014-06-02 04:49:15

标签: c# wpf linq inkcanvas

我有一个带有笔画的InkCanvas。我希望仅使用属于给定区域的笔划或笔划的一部分。简而言之,我希望在这个区域之外剪掉任何墨迹。我无法弄清楚如何正确地投射:

            Rect r = new Rect(100,100,100,100);

            StrokeCollection x = InkCanvas.Strokes
                .Select(s => s.GetClipResult(r));

1 个答案:

答案 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。