如果沒有一些重要的代碼,沒有辦法達到你想要的。正如您已經想到的那樣,最簡單的解決方案是使用轉換器。確實,這需要數據綁定,因此它不是源屬性上的靜態值。然而,由於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屬性,但是我懷疑它依然適合您的需要。