微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我无法在画布WPF C#中删除图像?

如何解决为什么我无法在画布WPF C#中删除图像?

我的班级放在Anobject.cs文件

public class AnObject
{
    public string Name { get; set; }
    public int? X { get; set; }
    public int? Y { get; set; }
    public AnObject(string name = null,int? x = null,int? y = null)
    {
        this.Name = name;
        this.X = x;
        this.Y = y;
    }
}

我的页面RolePlay.xaml.cs:

readonly AnObject[,] allObjects = new AnObject[50,38];
    private void RolePlayPage_Loaded(object sender,RoutedEventArgs e)
    {
        AnObject anObject = new AnObject();
        for (int i = 0; i < 50; i++)
        {
            for (int j = 0; j < 38; j++)
            {
                allObjects[i,j] = anObject;
            }
        }

        List<string> lines = File.ReadAllLines(@"myfile.txt").ToList();
        foreach (string line in lines)
        {
            string[] data = line.Split(' ');
            string data0 = data[0];
            int data1 = int.Parse(data[1]);
            int data2 = int.Parse(data[2]);

            anObject = new AnObject(data0,data1,data2);

            allObjects[data1,data2] = anObject;
        }
    }

我在画布中创建图像的方法

    private void UpdateallObjects()
    {
        foreach (AnObject obj in allObjects)
        {
            if (obj.Name != null)
            {
                Image objPic = new Image
                {
                    Name = obj.Name + obj.X.ToString() + obj.Y.ToString(),Width = 20,Height = 20,Source = new BitmapImage(new Uri($@"Objects\{obj.Name}.png",UriKind.Relative))
                };
                Canvas.SetLeft(objPic,(double)(obj.X * 20));
                Canvas.SetTop(objPic,(double)(obj.Y * 20));
                RolePlayCanvas.Children.Add(objPic);
            }
        }
    }

我的问题在我的removePic方法中:

if (allObjects[x,y].Name != null)
{
    Image picName = (Image)FindName(allObjects[x,y].Name + allObjects[x,y].X.ToString() + allObjects[x,y].Y.ToString());
    RolePlayCanvas.Children.Remove(picName);
    // Canvas.SetLeft(picName,0);
    allObjects[x,y].Name = null;
}

为什么没有从画布上删除picName? 尝试执行此“ Canvas.SetLeft(picName,0);”行将发生错误:System.ArgumentNullException:'值不能为空'。

解决方法

您的查找可能失败。尝试调试此代码,以确定是否将element实际设置为要删除的Image元素:

var obj = allObjects[x,y];
if (obj != null)
{
    var name = obj.Name + obj.X.ToString() + obj.Y.ToString();
    var element = RolePlayCanvas.Children.OfType<Image>().FirstOrDefault(x => x.Name == name);
    if (element != null)
        RolePlayCanvas.Children.Remove(element);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。