0

我有一个带有笔画的 InkCanvas。我希望只使用落在给定区域内的笔画或部分笔画。简而言之,我希望剪辑该区域之外的任何墨水。我不知道如何正确投射:

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

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

1 回答 1

2

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。

于 2014-06-02T05:12:17.393 回答