C # Отображение JPG изображения с WPF не работает

1

Для проекта я должен отображать фотографию JPG без привязки данных и без использования источника в файле XAML. Для этого я хотел бы использовать эту функцию:

private void updatephoto(string urlphoto)
{
   photo.Source = new BitmapImage(new Uri(String.Format("{0}", urlphoto), UriKind.Relative));
}

Потому что мой учитель использует его в своем примере, и для него это работает! Мой класс составлен так (это выдержка):

class Recette
{
    public String photo { get; private set; }
}

С конструктором, который допускает String для относительного пути. Использование относительного пути отлично работает в файле XAML с Source = "nameoffile.jpg", но когда в моем MainWindows.xaml.cs я хочу отображать фотографию, используя это:

Recette selectedRecette;
void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   selectedRecette = (sender as ComboBox).SelectedItem as Recette;
   updatephoto(selectedRecette.photo);
}

Последняя строка вызывает:

     private void updatephoto(string urlphoto)
     {
         photo.Source = new BitmapImage(new Uri(String.Format("{0}", urlphoto), UriKind.Relative));
     }

В XAML изображение:

< Image Height="100" Name="photo" HorizontalAlignment="Center"/ >

Поэтому я не понимаю, почему это не работает

Теги:
xaml
image

1 ответ

0
Лучший ответ

Вы сказали, что работает абсолютный путь, и это здорово! Ваш код работает точно так, как ожидалось.

Вы всегда можете использовать абсолютные пути, утверждение:

String path = @"C:\Users\user\Documents\Visual Studio 2013\Projects\projetf - Copie\td6bis\flamby.jpg";

Является полностью действительным из-за символа "@". Он говорит, что вся строка является строковым литералом, поэтому символ "\" ничего не скрывает.

Если вам действительно нужны относительные пути, скорее всего, путь не указывает, где вы думаете, что он делает. Ключ состоит в том, что все относительные пути относятся к рабочему каталогу исполняемого файла. Обычно это папка, в которой находится исполняемый файл, но есть места, которые становятся странными.

Быстрое праймер на относительных дорожках:

  1. Если ваш путь - это просто имя файла (например, "test.jpg"), файл должен быть расположен в исполняющем каталоге.

  2. Если путь выглядит как обычный путь (т.е. @"Images\test.jpg"), то он ищет папку, которая называется "Изображения" в исполняющем каталоге, который содержит файл изображения.

  3. Если у вас есть точки, то это будет "вверх" в дереве каталогов (например, @"..\Images\test.jpg"). Это поднимается в директорию из исполняемого каталога, ищет папку под названием "Изображения" и ищет там файл изображения.

Полностью случайная информация; оператор String.Format({0}, "MySTring") делает то же самое, что и "MySTring". Нет причин для String.Format, если у вас есть только один аргумент, и этот аргумент - целая строка.

  • 0
    Спасибо ! Так что я поставлю полный путь! ^^ Мои файлы находятся в каталоге выполнения, потому что я спрашиваю меня :( и использую относительный путь в файле XAML в качестве источника работы! Но не в C # ... Это странно! Поэтому я буду использовать полный путь, спасибо ! ^^
  • 0
    Нет ничего плохого в относительных путях, просто убедитесь, что они указывают на то, где находится файл (это очень легко испортить). Абсолютные пути намного безопаснее, но (очевидно) гораздо более многословны. Абсолютные пути также несут в себе проблему того, что они могут не работать на другом компьютере (если он не поместит ваше приложение в ту же структуру каталогов, что и у вас).
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню