C# 通过程序从矩形内的inkcanvas中选择笔划

C# 通过程序从矩形内的inkcanvas中选择笔划,c#,wpf,linq,inkcanvas,C#,Wpf,Linq,Inkcanvas,我有一幅有笔画的油画。我只希望使用一个给定区域内的笔划或部分笔划。简而言之,我想剪掉这个地区以外的任何墨水。我不知道如何正确地施放: Rect r = new Rect(100,100,100,100); StrokeCollection x = InkCanvas.Strokes .Select(s => s.GetClipResult(r)); LINQ方法Select()返回一个IEnumerable

我有一幅有笔画的油画。我只希望使用一个给定区域内的笔划或部分笔划。简而言之,我想剪掉这个地区以外的任何墨水。我不知道如何正确地施放:

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

            StrokeCollection x = InkCanvas.Strokes
                .Select(s => s.GetClipResult(r));
LINQ方法
Select()
返回一个
IEnumerable
,您试图将其分配给不是
IEnumerable
类型的x。所以正确的语法应该是

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

这将从剪辑区域检索所有笔划,并使用它们创建新的笔划集合。

您现在的笔划有什么问题?根据您需要的文档,无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Windows.Ink.StrokeCollection”。存在显式转换(是否缺少演员阵容?)谢谢。这确实回答了我的问题。但我想要的是执行此操作的linq代码:StrokeCollection strokes=new StrokeCollection();foreach(InkCanvas.Strokes中的笔划s){StrokeCollection rs=s.GetClipSolt(r);Strokes.Add(rs);}我根据您的要求更新了我的答案,这样您就可以使用单个LINQ,因此您无需对每一个都执行一个操作并单独添加它们。我很高兴它能为您工作。你也可以选择投票支持答案,使其保持在首位。
StrokeCollection strokes = new StrokeCollection(InkCanvas.Strokes.SelectMany(s => s.GetClipResult(r)));