即使我知道路径很好,WPF C# 图像也不会显示

WPF C# image won't show even though I know the path is good

提问人:StraleS02 提问时间:6/9/2023 最后编辑:FlorianStraleS02 更新时间:6/10/2023 访问量:34

问:

我必须将特定路径中的图像添加到类 Ucenik 的 ImageSource 字段。 以下是与该问题相关的所有代码(可能):

这是读取 Observable 集合的所有数据的函数 (类 Skola 的字段类型为 Observablecollection)。 “其他”部分很重要。

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;
}

我已经使用消息框测试了代码是否识别了照片的路径,并且确实如此,我认为问题可能出在构造函数或类似的东西上。另外,当我添加一张照片时,我应该提到 WPF,它会显示它,只是在启动程序时它必须加载自己,然后它就不会显示。

----编辑----

我通过更改添加照片的方式来修复它:

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();
C# WPF 图像 文件

评论


答: 暂无答案