如何解决为什么我无法在画布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 举报,一经查实,本站将立刻删除。