经过一些搜索,将运行时的图像加载到WPF窗口似乎相当复杂!
Image image;
image = new Uri("Bilder/sas.png", UriKind.Relative);
????.Source = new BitmapImage(image);
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用此代码,但我需要一些帮助才能使其正常工作.我在代码下面有一些红线!我也想知道是否需要在XAML代码中添加一些额外的代码,或者是否足够了:
<Image Height="200" HorizontalAlignment="Left" Margin="12,12,0,0" Name="image1"
Stretch="Fill" VerticalAlignment="Top" Width="350" />
Run Code Online (Sandbox Code Playgroud)
不知道,因为我看过XAML标签内部图像的示例.
编辑:
我知道这个:
var uri = new Uri("pack://application:,,,/sas.png");
var bitmap = new BitmapImage(uri);
image1.Source = bitmap;
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
编辑2:我的答案是"解决",但在Stack Overflow之外的som帮助.这段代码工作正常:
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri("pack://application:,,,/Resources/" + company + ".png");
image.EndInit();
image2.Source = image;
Run Code Online (Sandbox Code Playgroud)
Cle*_*ens 38
BitmapImage支持两者,甚至可以将Uri作为构造函数参数传递:
var uri = new Uri("http://...");
var bitmap = new BitmapImage(uri);
Run Code Online (Sandbox Code Playgroud)
如果图像文件位于本地文件夹中,则必须使用file://
Uri.你可以从这样的路径创建这样一个Uri:
var path = Path.Combine(Environment.CurrentDirectory, "Bilder", "sas.png");
var uri = new Uri(path);
Run Code Online (Sandbox Code Playgroud)
如果图像文件是程序集中的资源,则Uri必须遵循Pack Uri方案:
var uri = new Uri("pack://application:,,,/Bilder/sas.png");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Visual Studio Build Action sas.png
必须是Resource
.
一旦你创建了BitmapImage
一个像这个XAML一样的图像控件
<Image Name="image1" />
Run Code Online (Sandbox Code Playgroud)
您只需将BitmapImage分配给该Source
Image控件的属性:
image1.Source = bitmap;
Run Code Online (Sandbox Code Playgroud)
确保您的Visual Studio 中sas.png
被标记为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;
Run Code Online (Sandbox Code Playgroud)
并且 XAML 应该是
<Image Height="200" HorizontalAlignment="Left" Margin="12,12,0,0"
Name="image1" Stretch="Fill" VerticalAlignment="Top"
Source="../Bilder/sas.png"
Width="350" />
Run Code Online (Sandbox Code Playgroud)
编辑
动态地,我认为 XAML 将提供加载图像的最佳方式......
<Image Source="{Binding Converter={StaticResource MyImageSourceConverter}}"
x:Name="MyImage"/>
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当您设置不同的数据上下文时,Image
将在运行时自动加载。