21

在运行时将图像加载到 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(
    new Uri("pack://application:,,,/Resources/" + company + ".png"));
image2.Source = image;
4

2 回答 2

43

在 WPF 中,图像通常从StreamUri加载。

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 Studio 构建操作sas.png必须是Resource.

一旦你创建了一个BitmapImage并且还有一个像这个 XAML 中的Image控件

<Image Name="image1" />

您只需将 BitmapImage 分配给该SourceImage 控件的属性:

image1.Source = bitmap;
于 2012-08-09T10:42:36.553 回答
5

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

我认为 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" />  

编辑

动态地,我认为 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将在运行时自动加载。

于 2012-08-09T10:09:24.150 回答