通过程序从矩形内的墨水画布上选择笔画

本文关键字:墨水 笔画 选择 程序 过程 | 更新日期: 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。