سؤال

أنا أقوم بالتعديل على Silverlight 2.0.

لدي بعض الصور، ولدي حاليًا عنوان URL ثابت لمصدر الصورة.هل هناك طريقة لتحميل الصورة ديناميكيًا من مسار URL للموقع الذي يستضيف عنصر التحكم؟

وبدلاً من ذلك، هل يوجد إعداد تكوين، مخزَّن في مكان واحد، يحتفظ بالمسار الأساسي لعنوان URL، بحيث تحمل كل صورة اسم الملف فقط؟

هل كانت مفيدة؟

المحلول

في التعليمات البرمجية خلف أو تحويل قيمة يمكنك القيام به

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

نصائح أخرى

مما أجمعه أنك لا تحاول تغيير الصورة نفسها ديناميكيًا، بل تحاول تحديد موقع الصورة بشكل صحيح في وقت التشغيل.

أعتقد أن مجرد إضافة عنوان URL النسبي للصورة بـ "../" يجب أن يوصلك إلى جذر التطبيق الخاص بك، وليس بالضرورة إلى الموقع حيث قد لا تتم استضافة التطبيق في جذر الموقع.

إذا كان ملف XAP الخاص بك موجودًا على النحو التالي:

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

وأنت تحاول ربط الصورة التالية:

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

من الواضح أن جميع عناوين URI النسبية مرتبطة بالمكان الذي يوجد به ملف XAP (مجلد ClientBin عادةً) ويقوم Silverlight بإلحاق مساحة اسم عميل Silverlight الحالية.لذا، إذا كان عنصر تحكم Silverlight موجودًا في مساحة الاسم Whoppa، فستحتاج إلى وضع جميع صورك في دليلclientbin/Whoppa/.ليست مريحة تماما.

الحل البديل هو استخدام URIs المطلقة كما يلي:

new Uri(App.Current.Host.Source, "../images/a/boo.png");

// 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));  

HTTP: / /www.silverlightexamples.net/post/How-to-Get-Files-From-Resources-in-Silverlight-20.aspx

using System.Windows.Resources;      // StreamResourceInfo
using System.Windows.Media.Imaging;  // BitmapImage
....

StreamResourceInfo sr = Application.GetResourceStream(new Uri("SilverlightApplication1;component/MyImage.png", UriKind.Relative));
BitmapImage bmp = new BitmapImage();
bmp.SetSource(sr.Stream);

SilverlightHost. سوف مصدر توفر لك URL الذي تم استخدامه لتحميل الملف XAP. يمكنك استخدام هذا ثم لبناء URL النسبي لصورك.

وحتى إذا كان على سبيل المثال مستضافة XAP الخاصة بك على http://foo.bar/ClientBin/bas. XAP و تم تخزين الصور في http://foo.bar/Images/ الذي يمكن ببساطة استخدام المصدر للاستيلاء على اسم المضيف وبروتوكول لبناء URI الجديد.

وimg.Source = BitmapImage الجديد (صورة اوري) يجب أن تعمل.

وimg.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative)); سوف يعمل على حل صحيح لجذر تطبيق Silverlight حيث و"../images/my-image.jpg" لن.

وهذا صحيح فقط في التعليمات البرمجية وراء هذا عند تحديد مصدر الصورة بشكل حيوي. لا يمكنك استخدام هذه الرموز (و"/" لتعيين الجذر) في XAML (الذهاب fiquire، آمل أن تحديد ذلك)

وعملت رمز أدناه بالنسبة لي فقط عندما يتم تضمين الصورة في المشروع كملف مورد:

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

وأنا غير قادر على الوصول إلى URL من عناوين URL مطلقة. ولا حتى فليكر URL مزرعة للصور.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top