2016-02-05 2 views
0

Я просто изучаю C# и изо всех сил пытаюсь работать с URI в WPF. Я искал пару слов, но не имел большой удачи.C# WPF URI синтаксис

По существу, я пытаюсь иметь объект BitmapImage, сохраненный как свойство в объекте Car. Затем я хочу отобразить BitmapImage в элементе управления Image в форме WPF.

Приложение представляет собой простое приложение (это для назначения Uni), так что нет базы данных и т.д.

У меня есть два способа сделать это. Во-первых, я предварительно загружаю данные Car из текстового файла, включая имя файла JPG, который я хочу загрузить. Я включил JPG в каталог под названием «Файлы», который находится за пределами основного каталога, где хранятся мои исходные тексты и файлы классов. Я установил JPG-файл в «Содержимое» и «Всегда копировать». Когда я запускаю Debug, он копирует каталог Files и JPG в каталог debug \ bin.

Мой код создает BitmapImage, ссылаясь на JPG, используя URI следующим образом;

BitmapImage myImage = new BitmapImage (new Uri("Files/" + Car.Imagefilename, UriKind.Relative); 
Car.Image = myImage; 
ImageControl.Source = myImage; 

Если я пошагово этот код в отладчике, он иногда работает и отображает изображение, но большую часть времени он не делает.

Мой второй метод - это когда пользователь создает новый автомобиль. Этот метод всегда работает. В этом я использую диалоговое окно файла (dlg), чтобы выбрать изображение и использовать абсолютный путь.

BitmapImage myImage = new BitmapImage (new Uri(dlg.Filename, UriKind.Absolute); 
Car.Image = myImage; 
ImageControl.Source = myImage; 

Так что я не могу понять, почему первый метод не работает. Я думаю, что это связано с относительной ссылкой, но я не могу понять, как правильно синтаксически работать. Я пробовал использовать «pack: ,,,», я попытался добавить «компонент», я попробовал «@» перед «пакетом». Кажется, я не могу найти что-то, что объясняет это просто.

Извините, если это прямо, но это делает мою голову! Цените любые указатели.

ответ

1

Сначала попробуйте загрузить файл изображения, используя его абсолютный путь. Например, если изображения хранятся в C: \ Проекты \ yourproject \ файлов, то попробуйте использовать что-то вроде

BitmapImage myImage = new BitmapImage (new Uri("c:/projects/yourproject/files/carname.jpg", UriKind.Absolute); 

Если это работает, то, что вы столкнулись с проблемой является расчет путь.

На этом этапе вы можете либо вычислить Абсолют со ссылкой на свой исполняемый файл, используя AppDomain.CurrentDomain.BaseDirectory во время выполнения, либо использовать App.Config, чтобы сохранить путь и ссылаться на него.

Приветствия

+0

Большое вам спасибо! Это сработало. Я работаю с полным путем, а затем использовал AppDomain.CurrentDomain.BaseDirectory. Я знал, что это будет просто! –

+0

Это очень хороший Ник. Но теперь у вас есть зависимость от структуры папок, которая может быть не идеальной.Рассмотрите возможность сохранения пути к изображениям на вашем App.Config и загрузке его оттуда. Таким образом, если ваши пользователи решают, что они хотят перемещать изображения на отдельный сервер, все, что вам нужно сделать, это изменить файл конфигурации, и ваша система продолжит работу. В любом случае я рад, что это сработало для вас –

1

Если файлы изображений находятся в папке «Файлы» вашего визуального проекта студии, вы должны установить их Build Action к ResourceCopy to Output Directory к Do not copy), и загружать их в Resource File Pack URI:

var image = new BitmapImage(new Uri("pack://application:,,,/Files/" + Car.Imagefilename)); 
Car.Image = image; 
ImageControl.Source = image; 

Нет необходимости копировать файлы в любом месте. Изображения загружаются непосредственно из сборки.

Смежные вопросы