Изображение WPF UriSource и Привязка данных с помощью http: \\URL

У меня есть проблема при отображении изображения с веб-URL в пользовательском элементе управления WPF. Я работал через все предложения на подобную проблему, которую спрашивают относительно этого сайта в августе 2008 (Отобразите UriSource и Привязку данных), но ни одно из тех предложений не работало.

То, что я хотел бы сделать:


    
        
    

ImageFilePathUri является Uri, созданный от строкового пути до:

public Uri ImageFilePathUri
    {
        get
        {
            return new Uri(this.ImageFilePath);
        }
    }
}

Это дает "Свойству 'UriSource', или свойство 'StreamSource' должно быть установлено". ошибка как ожидалось.

Я также попытался использовать преобразователь значения:

public class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var image = new BitmapImage();
        image.BeginInit();
        if (value != null)
        {
            image.UriSource = new Uri((string)value);
        }
        image.DecodePixelWidth = 50;
        image.EndInit();
        return image;
    }
}

Однако связывая с ним использование:


не отображает изображение.

Дальнейшая попытка загрузить изображение программно, в конструкторе управления и/или событии Loaded управления также не работала:

if (this.MemberRollItemViewModel.Member != null)
{
    var image = new BitmapImage();
    image.BeginInit();
    image.UriSource = new Uri(this.MemberRollItemViewModel.Member.ImageFilePath);
    image.DecodePixelWidth = 50;
    image.EndInit();

    this.MemberImage.Source = image;
}

Одна вещь, которая работала, сохраняет образ к локальному пути к файлу и отображает это:


    
        
    

Это очевидно только полезно в отладке проблемы и не является решением. Тот же код, но заменение адресом HTTP для локального пути к файлу не работает.


    

Обновление:

Это - реализация свойства MemberImage.

public BitmapImage MemberImage
{
    get
    {
        var image = new BitmapImage();

        if (this.Member != null)
        {
            WebRequest request = WebRequest.Create(new Uri(this.Member.ImageFilePath, UriKind.Absolute));
            request.Timeout = -1;
            WebResponse response = request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            BinaryReader reader = new BinaryReader(responseStream);
            MemoryStream memoryStream = new MemoryStream();

            byte[] bytebuffer = new byte[BytesToRead];
            int bytesRead = reader.Read(bytebuffer, 0, BytesToRead);

            while (bytesRead > 0)
            {
                memoryStream.Write(bytebuffer, 0, bytesRead);
                bytesRead = reader.Read(bytebuffer, 0, BytesToRead);
            }

            image.BeginInit();
            memoryStream.Seek(0, SeekOrigin.Begin);

            image.StreamSource = memoryStream;
            image.EndInit();
        }

        return image;
    }
}

Обновление:

Это - то, как я связываю с управлением, по моему мнению:


MemberImage является свойством, которое я дал выше. Мой контекст данных устанавливается правильно, потому что то свойство выполняется, это просто не возвращает изображение.

7
задан Community 23 May 2017 в 10:32
поделиться

1 ответ

WebURL не может быть указан в качестве источника для свойства UriSource BitmapImage. Если это weburl, вам нужно загрузить изображение локально и привязать этот путь к UriSource. См. ниже

http://blogs.windowsclient.net/cennest/archive/2010/03/26/code-for-keeps-wpf-silverlight-retrieve-images-from-db-url.aspx

Обновление:

void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        var image = new BitmapImage();
        int BytesToRead=100;

        WebRequest request = WebRequest.Create(new Uri("http://www.interweb.in/attachments/pc-wallpapers/16187d1222942178-nature-wallpaper-nature-summer-wallpaper.jpg", UriKind.Absolute));
        request.Timeout = -1;
        WebResponse response = request.GetResponse();
        Stream responseStream = response.GetResponseStream();
        BinaryReader reader = new BinaryReader(responseStream);
        MemoryStream memoryStream = new MemoryStream();

        byte[] bytebuffer = new byte[BytesToRead];
        int bytesRead = reader.Read(bytebuffer, 0, BytesToRead);

        while (bytesRead > 0)
        {
            memoryStream.Write(bytebuffer, 0, bytesRead);
            bytesRead = reader.Read(bytebuffer, 0, BytesToRead);
        }

        image.BeginInit();
        memoryStream.Seek(0, SeekOrigin.Begin);

        image.StreamSource = memoryStream;
        image.EndInit();

        myImage.Source = image;
    }
12
ответ дан 6 December 2019 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: