如何在WPF项目中使用具有绝对路径的Image?

时间:2014-04-10 06:49:39

标签: xml wpf image

在XML中,我对Image文件有一些绝对的引用。我需要动态地在WPF应用程序中显示此图像,而不包括项目中的图像或包含在程序集中。

<imageUrl>C:\data\img.png</imageUrl>

我想知道:

  • 可以在WPF中使用,怎么做?
  • 是XML正确吗?
  • 我应该修改一些逃脱的东西吗?

PS:WPF项目与图像位于不同的文件夹中。

2 个答案:

答案 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;
    }
}

如果您尝试绑定图片并且可能出现错误,则可以尝试使用TargetNullValueFallbackValue

当源的值为 null 时,

TargetNullValue会返回您的值。

当绑定无法返回值时,

FallbackValue将返回您的值。

使用TargetNullValueFallbackValue的示例:

<!-- 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包含在项目中。

有关详细信息,请参阅此链接:

BindingBase.TargetNullValue Property

BindingBase.FallbackValue Property