2009-11-11 74 views
3

我的圖片分散在我的Silverlight應用程序中,並且由於我們決定的結構,所有圖像都從HTTP URL引入。如何在Silverlight中引用XAML中的圖像的基本URL?

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

我想爲引用存儲在一個全局的字符串常量,從所有XAML文件和代碼隱藏文件accessable所有圖像的基本URL:

目前,在XAML的圖像將作如下聲明。

即常量字符串BASE_URI =「http://www.example.com/directory」;

如何在XAML中執行此操作並將其引用到實際圖像名稱中?我想過使用一個轉換器,但這需要數據綁定 - 在這裏我只是直接使用字符串。

回答

2

如果沒有一些重要的代碼,沒有辦法達到你想要的。正如您已經想到的那樣,最簡單的解決方案是使用轉換器。確實,這需要數據綁定,因此它不是源屬性上的靜態值。然而,由於source屬性的靜態值已經成爲一個問題,所以它幾乎沒有理由避免這種方法。這裏是我的首選解決方案: -

轉換器: -

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設置,因此結合發生時,轉換器不打擾的價值是什麼。在這種情況下,路徑也是相對的。

在您的具體示例中,您可以在代碼中將固定的baseURL分配給轉換器的AdjustPath屬性,但是我懷疑它依然適合您的需要。