如何在Silverlight中引用XAML中图像的基本URL?

如何在Silverlight中引用XAML中图像的基本URL?,silverlight,xaml,global-variables,Silverlight,Xaml,Global Variables,我的silverlight应用程序中到处都是图像,由于我们决定的结构,所有图像都来自HTTP URL 目前,在XAML中,图像将声明如下: <Image Source="http://www.example.com/directory/example.png" /> 我希望所有引用图像的基本URL存储在全局字符串常量中,可从所有XAML文件和代码隐藏文件访问 i、 e.常量字符串BASE_URI=“” 我如何做到这一点,并在XAML中引用它,同时将字符串附加到实际的图像名称?我

我的silverlight应用程序中到处都是图像,由于我们决定的结构,所有图像都来自HTTP URL

目前,在XAML中,图像将声明如下:

<Image Source="http://www.example.com/directory/example.png" />

我希望所有引用图像的基本URL存储在全局字符串常量中,可从所有XAML文件和代码隐藏文件访问

i、 e.常量字符串BASE_URI=“”


我如何做到这一点,并在XAML中引用它,同时将字符串附加到实际的图像名称?我曾想过使用转换器,但这需要数据绑定,而这里我只是直接使用字符串。

如果没有一些重要的代码,就无法实现您想要的。正如您已经想到的,最简单的解决方案是使用转换器。确实,这需要数据绑定,因此它不像源属性上的静态值那样干净。然而,由于源属性上的静态值已经是一个问题,因此很难避免这种方法。以下是我喜欢的解决方案:-

转换器:-

public class BaseUriConverter : IValueConverter
{
    private Uri myBaseUri;

    public BaseUriConverter()
    {
        myBaseUri = new Uri(Application.Current.Host.Source.AbsoluteUri); 
    }
    public string AdjustPath { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Uri uri = new Uri(myBaseUri, AdjustPath);
        Uri result = new Uri(uri, (string)parameter);
        return result.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException("This converter only works for one way binding");
    }
}
在App.Xaml中的资源中:-

<local:BaseUriConverter x:Key="BaseUri" AdjustPath=".." />

请注意,“.”的使用允许使用典型用法。其中Xap位于应用程序文件夹的Clientbin文件夹中。因此,图像可以存储在相对于应用程序文件夹的公共文件夹中,无论该站点是在Visual Studio中运行还是在IIS中作为根站点安装,这都是有效的

然后某个页面中某个位置的图像可以如下所示:-

<Image DataContext="0" Source="{Binding Converter={StaticResource BaseUri}, ConverterParameter='images/Test.jpg' }"  />

注意,
DataContext
prorperty被设置,因此绑定发生,转换器不关心值是什么。在这种情况下,路径也是相对的

在您的特定示例中,您可以在代码中将您的fixed baseURL分配给转换器的AdjustPath属性,但我怀疑,目前的情况下,这将满足您的需要