WPF C#程序启动时Image图片无法显示问题及解决
WPF中程序启动加载图片不显示,手动添加正常的问题解决
我需要将指定路径的图片添加到Ucenik类的ImageSource字段中,程序启动时图片无法显示,但手动添加时可正常显示,且已确认图片路径正确。
读取ObservableCollection数据的citaj函数(Skola类包含ObservableCollection类型字段,重点为else分支)
public ObservableCollection<Skola> citaj(string putanja) { ObservableCollection<Skola> skole = new ObservableCollection<Skola>(); ObservableCollection<Ucenik> ucenicis = new ObservableCollection<Ucenik>(); using (StreamReader sr = new StreamReader(putanja)) { string linija; while ((linija = sr.ReadLine()) != null) { string[] delovi = linija.Split(";"); if (delovi.Length == 4) { if (delovi[0] == "0") { string naziv_s = delovi[1]; int id_s = int.Parse(delovi[2]); string adresa_s = delovi[3]; Skola s = new Skola(id_s, naziv_s, adresa_s); foreach(Ucenik u in ucenicis) { s.dodajUcenikaTest(u); } ucenicis.Clear(); skole.Add(s); } else { string ime = delovi[0]; string prezime = delovi[1]; string adresa = delovi[2]; string jbmg = delovi[3]; string newFileName = ""; newFileName += ime; newFileName += "_"; newFileName += prezime; newFileName += ".png"; string newFilePath = Path.Combine(folderPath_ucenik, newFileName); if (File.Exists(newFilePath)) { BitmapImage slika = new BitmapImage(new Uri(newFilePath, UriKind.RelativeOrAbsolute)); Ucenik u = new Ucenik(jbmg, ime, prezime, adresa, slika); ucenicis.Add(u); } else { Ucenik u = new Ucenik(jbmg, ime, prezime, adresa); ucenicis.Add(u); } } } } } }
Citac类中citaj函数的调用方式
private ObservableCollection<Skola> skole=new ObservableCollection<Skola>(); private Skola NEUPISANI; private Skola selected_skolice = new Skola(); private Citac citac = new Citac(); public MainWindow() { InitializeComponent(); /* --> */ skole = citac.citaj("Ucenici.txt"); NEUPISANI=skole.ElementAt(0); }
Ucenik类的部分实现
public event PropertyChangedEventHandler PropertyChanged; private string JMBG; private string ime; private string prezime; private string adresa; private ImageSource slika; public Ucenik(string JMBG, string ime, string prezime, string adresa) { this.ime = ime; this.prezime = prezime; this.adresa = adresa; this.JMBG = JMBG; } public Ucenik(string JMBG, string ime, string prezime, string adresa, ImageSource slika) { this.ime = ime; this.prezime = prezime; this.adresa = adresa; this.JMBG = JMBG; this.slika = slika; }
问题解决方法
修改BitmapImage的加载方式即可解决问题:
原代码:
BitmapImage slika = new BitmapImage(new Uri(newFilePath, UriKind.RelativeOrAbsolute));
修改后代码:
BitmapImage slika = new BitmapImage(); slika.BeginInit(); slika.UriSource = new Uri(newFilePath, UriKind.RelativeOrAbsolute); slika.CacheOption = BitmapCacheOption.OnLoad; slika.EndInit();
内容的提问来源于stack exchange,提问作者StraleS02
相关产品推荐
相关产品推荐

