图像控制,覆盖从uri

时间:2016-02-05 09:02:51

标签: c# windows-runtime windows-phone-8.1 winrt-xaml

我正在构建适用于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}" />

1 个答案:

答案 0 :(得分:1)

是的,因为<Image />已被封存,您无法从中获取。您最好的选择是使用您指定的附加属性对其进行扩展。另一种选择是使用行为,但没有意义。它不会比附属财产“更好”。干得好。