我正在构建适用于Windows Phone 8.1的通用应用。
我需要从uri下载图像,在xaml中我通常会做这样的事情
<Image Source="http://www.examlpe.com/img.png" />
但是这次我需要在http请求的标题中添加一些参数,否则服务器不允许我下载图像。
我正在考虑使用依赖项属性扩展图像控件,该属性具有带有所有正确标头参数的http请求以下载图像。
我的问题是:
有一个更好的解决方案来实现这个结果吗?
修改
这是我现在使用的代码
public class ImageUriExtension : DependencyObject
{
public static readonly DependencyProperty ImageUriProperty = DependencyProperty.Register("ImageUri", typeof(string), typeof(ImageUriExtension), new PropertyMetadata(string.Empty, OnUriChanged));
public static string GetImageUri(DependencyObject obj)
{
return (string)obj.GetValue(ImageUriProperty);
}
public static void SetImageUri(DependencyObject obj, string value)
{
obj.SetValue(ImageUriProperty, value);
}
private static async void OnUriChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var source = d as Image;
var path = e.NewValue as string;
var uri = new Uri(NetConfig.baseUrl + path);
var stream = await RestClient.DownloadFile(uri);
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(stream);
source.Source = bitmap;
}
}
这是xaml
<Image local:ImageUriExtension.ImageUri="{Binding url}" />
答案 0 :(得分:1)
是的,因为<Image />
已被封存,您无法从中获取。您最好的选择是使用您指定的附加属性对其进行扩展。另一种选择是使用行为,但没有意义。它不会比附属财产“更好”。干得好。