如何在WPF中从画布子中获取行

本文关键字:获取 WPF | 更新日期: 2023-09-27 17:49:40

我正试图删除我在画布上绘制的一些线,我的想法是使用Canvas.Children的线控件的坐标。

我的初始代码是这样的:

    var ax = Mouse.GetPosition(Canvas).X;
    int mx1 = (int)ax - (eraserSize / 2);
    int mx2 = (int)ax + (eraserSize / 2);
    var ay = Mouse.GetPosition(Canvas).Y;
    int my1 = (int)ay - (eraserSize / 2);
    int my2 = (int)ay + (eraserSize / 2);
foreach(Line l in Canvas.Children)
{
    if((l.X1 < mx1 && lX2 > mx2) && (l.Y1 < my1 && lY2 > my2))
    {
        Canvas.Children.Remove(l);
    }
}

但是它当然不能工作,因为它不能将其他控件强制转换为Line。

我试着用if(l.Name == "LineName")把这些在Line[]Control[],但没有工作,我不知道还有什么要尝试,然后只是画在它…

如何在WPF中从画布子中获取行

foreach(var child in Canvas.Children)
{
    var l = child as Line;
    if(l != null && (l.X1 < mx1 && lX2 > mx2) && (l.Y1 < my1 && lY2 > my2))
    {
        // You can't remove item from collection you enumerate thru
        // Canvas.Children.Remove(l);
        LinesToDelete.Add(l);
    }
}

然后你可以简单地删除所有的行LinesToDelete