You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:22:07