在XML中,我对Image
文件有一些绝对的引用。我需要动态地在WPF应用程序中显示此图像,而不包括项目中的图像或包含在程序集中。
<imageUrl>C:\data\img.png</imageUrl>
我想知道:
PS:WPF项目与图像位于不同的文件夹中。
答案 0 :(得分:1)
假设您已经有代码从XML文件中读取数据。您只需创建BitmapImage
并将其设置为图像控件源。
<强> XAML 强>
<Image x:Name="img"/>
代码
BitmapImage image = new BitmapImage(new Uri("C:\data\img.png",
UriKind.Absolute));
image.CacheOption = BitmapCacheOption.OnLoad;
image.Freeze();
img.Source = image;
当然不是直接给出字符串,而是必须从XML文件中读取它并将字符串传递给Uri。
答案 1 :(得分:1)
是的,可以这样做,你可以这样做:
XAML
<Grid>
<Image Name="MyImage"
Source="{Binding Path=MyImageSource}"
Width="200"
Height="200" />
</Grid>
Code-behind
public partial class MainWindow : Window
{
// He must use the INotifyPropertyChanged method
public string MyImageSource
{
get;
set;
}
public MainWindow()
{
InitializeComponent();
// Here you get in advance path to Image from XML
MyImageSource = "C:\\img.jpg";
this.DataContext = this;
}
}
如果您尝试绑定图片并且可能出现错误,则可以尝试使用TargetNullValue
和FallbackValue
:
TargetNullValue
会返回您的值。
FallbackValue
将返回您的值。
使用TargetNullValue
和FallbackValue
的示例:
<!-- xmlns:sys="clr-namespace:System;assembly=mscorlib" -->
<Window.Resources>
<!-- Test data -->
<local:TestDataForImage x:Key="MyTestData" />
<!-- Image for FallbackValue -->
<sys:String x:Key="ErrorImage">pack://application:,,,/NotFound.png</sys:String>
<!-- Image for NULL value -->
<sys:String x:Key="NullImage">pack://application:,,,/NullImage.png</sys:String>
</Window.Resources>
<Grid DataContext="{StaticResource MyTestData}">
<Image Name="ImageNull"
Width="100"
Height="100"
Source="{Binding Path=NullString, TargetNullValue={StaticResource NullImage}}" />
<Image Name="ImageNotFound"
Width="100"
Height="100"
Source="{Binding Path=NotFoundString, FallbackValue={StaticResource ErrorImage}}" />
</Grid>
最好将这些Images:ErrorImage和NullImage包含在项目中。
有关详细信息,请参阅此链接: