Xml 如何在WPF项目中使用具有绝对路径的图像?
在XML中,我绝对引用了Xml 如何在WPF项目中使用具有绝对路径的图像?,xml,wpf,image,Xml,Wpf,Image,在XML中,我绝对引用了Image文件。我需要在WPF应用程序中动态显示此图像,而不将图像包含在project forder或程序集中 <imageUrl>C:\data\img.png</imageUrl> C:\data\img.png 我想知道: 在WPF中是可能的,怎么做 XML正确吗 我应该做点什么吗 PS:WPF项目位于与图像不同的文件夹中。假设您已经准备好从XML文件读取数据的代码。您只需创建位图图像,并将其设置为图像控制源 XAML <Ima
Image
文件。我需要在WPF应用程序中动态显示此图像,而不将图像包含在project forder或程序集中
<imageUrl>C:\data\img.png</imageUrl>
C:\data\img.png
我想知道:
- 在WPF中是可能的,怎么做
- XML正确吗
- 我应该做点什么吗
PS:WPF项目位于与图像不同的文件夹中。假设您已经准备好从XML文件读取数据的代码。您只需创建
位图图像
,并将其设置为图像控制源
XAML
<Image x:Name="img"/>
当然,您必须从XML文件中读取字符串并将其传递给Uri,而不是直接给出字符串。是的,这是可能的,您可以这样做:
XAML
<Grid>
<Image Name="MyImage"
Source="{Binding Path=MyImageSource}"
Width="200"
Height="200" />
</Grid>
如果尝试绑定图像时出现错误,则可能会出现这种情况,您可以尝试使用和:
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>
pack://application:,,,/NotFound.png
pack://application:,,,/NullImage.png
希望项目中包含以下图像:ErrorImage和NullImage
有关更多信息,请参阅以下链接:
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;
}
}
<!-- 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>