2008-10-24 17 views
13

मैं सिल्वरलाइट 2.0 के साथ tinkering हूँ।सिल्वरलाइट छवि: लोड यूआरएल गतिशील रूप से?

मेरे पास कुछ छवियां हैं, जिनके पास वर्तमान में छवि स्रोत के लिए एक स्थिर यूआरएल है। क्या नियंत्रण की मेजबानी करने वाली साइट के लिए URL पथ से छवि को गतिशील रूप से लोड करने का कोई तरीका है?

वैकल्पिक रूप से, कॉन्फ़िगरेशन सेटिंग, एक ही स्थान पर संग्रहीत, जो यूआरएल के लिए आधार पथ रखती है, ताकि प्रत्येक छवि में केवल फ़ाइल नाम हो?

उत्तर

16

पीछे कोड या एक मूल्य के कनवर्टर में आप कर

Uri uri = new Uri("http://testsvr.com/hello.jpg"); 
    YourImage.Source = new BitmapImage(uri); 
2

SilverlightHost.Source आप URL कि XAP फ़ाइल को लोड करने के लिए इस्तेमाल किया गया था प्रदान करेगा कर सकते हैं। आप इसका उपयोग अपनी छवियों के लिए एक सापेक्ष यूआरएल बनाने के लिए कर सकते हैं।

तो उदाहरण के लिए यदि आपका एक्सएपी http://foo.bar/ClientBin/bas.xap पर होस्ट किया गया है और आपकी छवियों को http://foo.bar/Images/ में संग्रहीत किया गया था तो आप नए यूआरआई के निर्माण के लिए होस्ट नाम और प्रोटोकॉल को पकड़ने के लिए स्रोत का उपयोग कर सकते हैं।

16

जो मैं इकट्ठा करता हूं उससे आप छवि को गतिशील रूप से बदलने की कोशिश नहीं कर रहे हैं, बल्कि रनटाइम पर छवि का स्थान सही ढंग से निर्धारित करने की कोशिश नहीं कर रहे हैं।

मुझे विश्वास है कि "../" के साथ छवि रिश्तेदार यूआरएल को उपसर्ग करना आपको अपने आवेदन की जड़ पर ले जाना चाहिए, जरूरी नहीं कि साइट साइट के रूट में होस्ट न हो।

अपने XAP फ़ाइल के रूप में स्थित है, तो इस प्रकार है:

http://somesite.foo/app1/somethingelse/clientbin/MyFoo.xap

और तुम जहां निम्न छवि लिंक करने का प्रयास:

http://somesite.foo/app1/somethingelse/images/a/boo.png

Apparentl y सभी रिश्तेदार यूआरआई एक्सएपी फ़ाइल स्थित हैं (आमतौर पर क्लाइंटबिन फ़ोल्डर) के संबंध में हैं और सिल्वरलाइट वर्तमान सिल्वरलाइट क्लाइंट नेमस्पेस को जोड़ता है। तो यदि आप सिल्वरलाइट नियंत्रण नामस्थान में हैं Whoppa आपको अपनी सभी छवियों को क्लाइंटबिन/व्हाओपा/निर्देशिका में रखना होगा। बिल्कुल सुविधाजनक नहीं है।

वैकल्पिक हल के रूप में इस निरपेक्ष यूआरआई उपयोग करने के लिए है:

नई उरी (App.Current.Host.Source, "../images/a/boo.png");

+0

यह मेरे लिए काम नहीं करता। लोड करने के लिए एक छवि प्राप्त करने का एकमात्र तरीका पूर्ण यूआरएल निर्दिष्ट करना है, जैसे: http: //localhost/hello.jpg। यदि मैं उपयोग करता हूं तो कोई छवि दिखाई नहीं देती है: hello.jpg, /hello.jpg, या ../hello.jpg। और मेरी .xap फ़ाइल/क्लाइंटबिन फ़ोल्डर में है। –

+2

जाहिर है कि सभी रिश्तेदार यूआरआई एक्सएपी फ़ाइल कहां स्थित हैं (क्लाइंटबिन फ़ोल्डर आमतौर पर) और सिल्वरलाइट नामस्थान जोड़ता है। कामकाज निम्नानुसार पूर्ण होना है: नया उरी (App.Current.Host.Source, "../hello.jpg"); –

2

img.Source = नया बिटमैप छवि (छवि यूरी) काम करना चाहिए।

2

img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative)); सिल्वरलाइट एप्लिकेशन की जड़ को सही ढंग से हल करेगा जहां "../images/my-image.jpg" नहीं होगा।

गतिशील रूप से छवि के स्रोत को सेट करते समय यह कोड-बैक में केवल सत्य है।आप इस नोटेशन (रूट को नामित करने के लिए "/") का उपयोग नहीं कर सकते हैं (फिक्चर जाएं, उम्मीद है कि वे इसे ठीक करते हैं)

2

नीचे दिया गया कोड केवल तभी काम करता है जब छवि को संसाधन फ़ाइल के रूप में प्रोजेक्ट में शामिल किया गया हो :

img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative)); 

मैं पूर्ण URL से यूआरएल तक पहुंचने में असमर्थ हूं। छवियों के लिए फ़्लिकर का फार्म यूआरएल भी नहीं।

+0

आप केवल सर्वर पर संसाधनों के लिए http कनेक्शन बनाने में सक्षम होंगे जहां आपका एक्सएपी रहता है जब तक कि आप एक विश्वसनीय अनुप्रयोग के रूप में नहीं चल रहे हैं, नहीं? – Jeb

6
// create a new image 
Image image = new Image(); 

// better to keep this in a global config singleton 
string hostName = Application.Current.Host.Source.Host;     
if (Application.Current.Host.Source.Port != 80) 
    hostName += ":" + Application.Current.Host.Source.Port; 

// set the image source 
image.Source = new BitmapImage(new Uri("http://" + hostName + "/cute_kitten112.jpg", UriKind.Absolute)); 
+3

अच्छी छवि फ़ाइल नाम डाला जा रहा है: डी – pearcewg

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