Как загрузить изображение в WPF во время выполнения?

После некоторого поиска кажется довольно сложным загрузить изображение во время выполнения в окно WPF!?

        Image image;
        image = new Uri("Bilder/sas.png", UriKind.Relative);
        ????.Source = new BitmapImage(image);

Я пытаюсь использовать этот код, но мне нужна помощь, чтобы заставить его работать. Я получаю красные строки ниже кода! Я также задаюсь вопросом, нужно ли мне добавить дополнительный код внутри кода XAML или достаточно с этим:

 <Image Height="200" HorizontalAlignment="Left" Margin="12,12,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="350" />

Удивление, потому что я видел примеры с соболезнованиями изображений внутри тегов XAML.

EDIT:

Я знаю это:

        var uri = new Uri("pack://application:,,,/sas.png");
        var bitmap = new BitmapImage(uri);
        image1.Source = bitmap;

XAML:

    <Grid Width="374">
    <Image Height="200" HorizontalAlignment="Left" Margin="12,12,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="350" />
    <Button Content="Start" Height="23" HorizontalAlignment="Left" Margin="12,226,0,0" Name="btnStart" VerticalAlignment="Top" Width="75" />
    <Button Content="Land" Height="23" HorizontalAlignment="Left" Margin="287,226,0,0" Name="btnLand" VerticalAlignment="Top" Width="75" />
    <ComboBox Height="23" HorizontalAlignment="Left" Margin="110,226,0,0" Name="cmbChangeRoute" VerticalAlignment="Top" Width="156" />

</Grid>

ИЗМЕНИТЬ 2: Мой ответ "разрешен", но с помощью som help вне Stack Overflow. Этот код отлично работает:

        BitmapImage image = new BitmapImage();
        image.BeginInit();
        image.UriSource = new Uri("pack://application:,,,/Resources/" + company + ".png");
        image.EndInit();
        image2.Source = image;

Ответ 1

В WPF изображение обычно загружается из потока или Uri.

BitmapImage поддерживает оба варианта, и Uri может даже передаваться как аргумент конструктора:

var uri = new Uri("http://...");
var bitmap = new BitmapImage(uri);

Если файл изображения находится в локальной папке, вам нужно будет использовать file:// Uri. Вы можете создать такой Uri с пути следующим образом:

var path = Path.Combine(Environment.CurrentDirectory, "Bilder", "sas.png");
var uri = new Uri(path);

Если файл изображения является ресурсом в сборке, Uri должен следовать схеме Pack Uri:

var uri = new Uri("pack://application:,,,/Bilder/sas.png");

В этом случае Visual Build Build Action для sas.png должно быть Resource.

Как только вы создали BitmapImage, а также Image, как в этом XAML

<Image Name="image1" />

вы просто назначили BitmapImage свойству Source этого элемента управления Image:

image1.Source = bitmap;

Ответ 2

Убедитесь, что ваш sas.png отмечен как Build Action: Content и Copy To Output Directory: Copy Always в своей Visual Studio Properties...

Я думаю, что исходный код С# похож на этот...

     Image image = new Image();
     image.Source = (new ImageSourceConverter()).ConvertFromString("pack://application:,,,/Bilder/sas.png") as ImageSource;

и XAML должен быть

     <Image Height="200" HorizontalAlignment="Left" Margin="12,12,0,0" 
            Name="image1" Stretch="Fill" VerticalAlignment="Top" 
            Source="../Bilder/sas.png"
            Width="350" />  

ИЗМЕНИТЬ

Динамически я думаю, что XAML обеспечит лучший способ загрузки изображений...

      <Image Source="{Binding Converter={StaticResource MyImageSourceConverter}}"
             x:Name="MyImage"/>

где image.DataContext - путь string.

    MyImage.DataContext = "pack://application:,,,/Bilder/sas.png";

   public class MyImageSourceConverter : IValueConverter
   {
        public object Convert(object value_, Type targetType_, 
        object parameter_, System.Globalization.CultureInfo culture_)
        {
            return (new ImageSourceConverter()).ConvertFromString (value.ToString());
        }

        public object ConvertBack(object value, Type targetType, 
        object parameter, CultureInfo culture)
        {
              throw new NotImplementedException();
        }
   }

Теперь, когда вы устанавливаете другой контекст данных, Image будет автоматически загружаться во время выполнения.