2010-06-30 9 views
6

का उपयोग कर मुझे एक WPF उपयोगकर्ता नियंत्रण में एक वेब यूआरएल के साथ एक छवि प्रदर्शित करने में समस्या हो रही है। मैंने अगस्त 2008 (Image UriSource and Data Binding) में इस साइट पर एक समान समस्या के लिए सभी सुझावों के माध्यम से काम किया है, लेकिन इनमें से कोई भी सुझाव काम नहीं किया है।WPF छवि UriSource और डेटा बाइंडिंग http: \ URL

मैं क्या करना चाहते हैं क्या है:

<Image Width="50" Name="MemberImage"> 
    <Image.Source> 
     <BitmapImage DecodePixelWidth="50" UriSource="{Binding Member.ImageFilePathUri}" /> 
    </Image.Source> 
</Image> 

ImageFilePathUri एक उरी के माध्यम से स्ट्रिंग पथ से बनाए गए है:

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; 
    } 
} 

हालांकि, का उपयोग कर इसे के लिए बाध्य:

<Image Name="TestImage" Width="50" Source="{Binding Path=Member.ImageFilePath, Converter=Parliament.HansardApplicationSuite.Logging.Helpers.ImageConverter}"></Image> 

छवि प्रदर्शित नहीं करता है।

नियंत्रण निर्माता और/या नियंत्रण लोड घटना में प्रोग्राम के रूप में छवि को लोड करने, एक और प्रयास भी काम नहीं किया:

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; 
} 

एक बात यह है कि काम किया है एक स्थानीय फाइल करने के लिए छवि की बचत है पथ और प्रदर्शित करना:

<Image Width="50" Name="MemberImage"> 
    <Image.Source> 
     <BitmapImage DecodePixelWidth="50" UriSource="C:\Data\6bc64e7b-2df5-40d5-b6c4-eaf732318222.jpg" /> 
    </Image.Source> 
</Image> 

यह स्पष्ट रूप से केवल समस्या को डीबग करने में उपयोगी है और समाधान नहीं है। एक ही कोड लेकिन स्थानीय फ़ाइल पथ के लिए http पता को प्रतिस्थापित करना काम नहीं करता है।

<Image.Source> 
    <BitmapImage DecodePixelWidth="50" UriSource="http://member.org/6bc64e7b-2df5-40d5-b6c4-eaf732318222.jpg" /> 
</Image.Source> 

अद्यतन:

यह 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; 
    } 
} 

अद्यतन:

इस तरह मैं मेरे विचार में नियंत्रण के लिए बाध्य कर रहा हूँ:

<Image Width="50" Source="{Binding MemberImage}" /> 

MemberImage संपत्ति मैं ऊपर दिए गए है। मेरा डेटा संदर्भ सही ढंग से सेट किया जा रहा है क्योंकि वह संपत्ति चल रही है, यह सिर्फ एक छवि वापस नहीं कर रहा है।

उत्तर

10

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; 
    } 
+0

राग है, धन्यवाद। मैंने यह सुनिश्चित करने की कोशिश की है कि एक संपत्ति बनाकर, सदस्य छवि, ब्लॉग में उदाहरण का उपयोग करके बिटमैप इमेज लौटकर और फिर मेरी छवि को बाध्यकारी करें। उस संपत्ति को स्रोत। लेकिन यह अभी भी प्रदर्शित नहीं होता है। <छवि चौड़ाई = "50" स्रोत = "{बाध्यकारी सदस्य छवि}" /> क्या इसका मतलब है कि मुझे पहले छवि को सहेजने की आवश्यकता है और फिर उस फ़ाइल पथ से बांधना है? –

+0

नहीं, यह सिर्फ काम करेगा। क्या आप सदस्य छवि संपत्ति कोड पोस्ट कर सकते हैं? – Ragunathan

+0

मैंने सदस्य मूल कार्यान्वयन के साथ अपना मूल प्रश्न अपडेट किया है। यह अभी भी काम नहीं कर रहा है, बस किसी भी छवि को वापस नहीं कर रहा है। –

संबंधित मुद्दे