经过一些搜索,将运行时的图像加载到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: 我的回答是“解决”了,但是在Stack Overflow之外有一些帮助。这段代码工作正常:
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri("pack://application:,,,/Resources/" + company + ".png");
image.EndInit();
image2.Source = image;
答案 0 :(得分:34)
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");
在这种情况下,sas.png
的Visual Studio构建操作必须是Resource
。
创建BitmapImage
并且在此XAML中也有Image控件
<Image Name="image1" />
您只需将BitmapImage分配给该Image控件的Source
属性:
image1.Source = bitmap;
答案 1 :(得分:3)
确保您的sas.png
在其Visual Studio Build Action: Content
中标记为Copy To Output Directory: Copy Always
和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
将在运行时自动加载。