如何在运行时加载图像到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: Content
并Copy 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.DataContext
是string
path。
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
将在运行时自动加载。
- 什么是你遇到过的最糟糕的现实世界的macros/预处理器的滥用?
- 任何人都有架构跨平台WP7 Android iOS移动开发(monotouch,monodroid,C#)的经验。
- AssemblyInfo版本信息星号
- 多余的演员是否得到优化?
- 如何在debugging期间在ASP.NET(C#)中使用Console.WriteLine?
- int a = {1,2,}; 允许使用奇怪的逗号。 任何特定的原因?
- 在初始化“float”时,转换为“float”并添加“f”作为后缀,有什么区别?
- C ++中main的签名参数是否具有unsiged和const限定符?
- 打开文件对话框,并使用WPF控件和C#select一个文件