如何在运行时加载图像到WPF?

经过一番search,似乎将运行时加载到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标签内的图像的例子。

编辑:

我正在使用这个知道:

  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:我的答案是“解决”,但与外面堆栈溢出索姆帮助。 此代码正常工作:

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

在WPF中,图像通常是从Stream或Uri加载的。

BitmapImage支持两者,Uri甚至可以作为构造函数parameter passing:

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

如果图像文件位于本地文件夹中,则必须使用file:// Uri。 你可以像这样创build一个这样的Uri:

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

如果图像文件是程序集中的资源,则Uri必须遵循Pack Urischeme:

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

在这种情况下, sas.png的Visual Studio Build Action必须是Resource

一旦你创build了一个BitmapImage并且像这个XAML一样拥有一个Image控件

 <Image Name="image1" /> 

您只需将BitmapImage分配给该Image控件的Source属性即可:

 image1.Source = bitmap; 

确保您的sas.png被标记为Build Action: ContentCopy To Output Directory: Copy Always在其Visual Studio Properties Copy To Output Directory: Copy Always

我认为C#源代码是这样的…

  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" /> 

编辑

dynamic地我认为XAML将提供加载图像的最佳方式…

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

image.DataContextstringpath。

  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将在运行时自动加载。