Как использовать XML-файл для папки с изображениями? - PullRequest
0 голосов
/ 07 ноября 2019

Я действительно новичок в WPF и XML. У меня есть папка с изображениями и XML-файл (в моем XML-файле есть имя моей папки с изображениями и имена изображений). Как я могу вызвать мои изображения из файла через xml и составить список с ними?

Спасибо. (Папка с моими изображениями находится на моем рабочем столе, а также в папке «Отладка проекта».)

Пример XML

<Item>
    <Title>
        Image 1
    </Title>
    <Image>
        <Image FolderName="Images">1.jpg</Image>
    </Image>
</Item>

Где я застрял.

void LoadImages()
    {
        XDocument xml = XDocument.Load("images.xml");

        picList = new List<Picture>();

        var pics = (from item in xml.Descendants("Item")
                     select new Picture
                     {

                         Title = (string)item.Element("Title").Value,
                         Img = (BitmapImage(?????????))item.Element("Image")???

                     }).ToList();

        foreach (var item in pics)
        {
            picList.Add(item);
        }

        imgList.ItemsSource = picList;
    }

МойКласс изображения

     public class Picture
    {

        public BitmapImage Img { get; set; }
        public string Title { get; set; }
    }

1 Ответ

0 голосов
/ 07 ноября 2019

Измените структуру XML на что-то подобное, как показано ниже, только с одним <Image> элементом на <Item>.

<Item>
    <Title>Image 1</Title>
    <Image FolderName="Images">1.jpg</Image>
</Item>

Тогда это должно работать с относительными путями изображения:

public void LoadImages()
{
    imgList.ItemsSource = XDocument.Load("images.xml")
        .Descendants("Item")
        .Select(item =>
    {
        var title = item.Element("Title").Value;
        var folder = item.Element("Image").Attribute("FolderName").Value;
        var file = item.Element("Image").Value;
        var path = Path.Combine(folder, file);

        return new Picture
        {
            Title = title,
            Img = new BitmapImage(new Uri(path, UriKind.Relative))
        };
    });
}

Если вам нужны абсолютные пути к файлам, вы можете добавить корневую папку с изображениями к вызову Path.Combine и удалить UriKind.Relative.

Вы также должны объявить класс Picture, как показано ниже, для большей гибкостив диапазоне типов вы можете перейти к свойству Img:

public class Picture
{
    public ImageSource Img { get; set; }
    public string Title { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...