2008-10-24 37 views
13

Tôi đang làm việc với Silverlight 2.0.Hình ảnh Silverlight: tải URL động?

Tôi có một số hình ảnh, hiện tôi có URL tĩnh cho nguồn hình ảnh. Có cách nào để tự động tải hình ảnh từ đường dẫn URL cho trang web lưu trữ kiểm soát không?

Ngoài ra, cài đặt cấu hình, được lưu trữ ở một nơi duy nhất, giữ đường dẫn cơ sở cho URL, sao cho mỗi hình ảnh chỉ giữ tên tệp?

Trả lời

16

Trong đoạn mã phía sau hoặc chuyển đổi giá trị mà bạn có thể làm

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

SilverlightHost.Source sẽ cung cấp cho bạn địa chỉ URL đã được sử dụng để tải file XAP. Bạn có thể sử dụng điều này để sau đó xây dựng một URL tương đối cho hình ảnh của bạn. Vì vậy, nếu ví dụ XAP của bạn được lưu trữ trên http://foo.bar/ClientBin/bas.xap và hình ảnh của bạn được lưu trữ trong http://foo.bar/Images/, bạn có thể chỉ cần sử dụng Nguồn để lấy tên máy chủ và giao thức để xây dựng URI mới.

16

Từ những gì tôi thu thập, bạn không cố gắng tự thay đổi hình ảnh, mà là để xác định chính xác vị trí của hình ảnh khi chạy.

Tôi tin rằng chỉ cần tiền tố URL liên quan đến hình ảnh có "../" sẽ đưa bạn đến thư mục gốc của ứng dụng, không nhất thiết là trang web vì ứng dụng có thể không được lưu trữ trong thư mục gốc của trang web.

Nếu tập tin XAP của bạn có vị trí như sau:

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

Và bạn nơi cố gắng để liên kết các hình ảnh sau đây:

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

Apparentl y tất cả các URI tương đối có liên quan đến vị trí tệp XAP (thư mục ClientBin thường) và Silverlight nối thêm vùng tên máy khách Silverlight hiện tại. Vì vậy, nếu bạn kiểm soát Silverlight là trong không gian tên Whoppa bạn sẽ cần phải đặt tất cả các hình ảnh của bạn trong thư mục clientbin/Whoppa /. Không chính xác tiện lợi.

Cách giải quyết là sử dụng URI tuyệt đối như sau:

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

+0

này không làm việc cho tôi. Cách duy nhất tôi có thể tải hình ảnh là chỉ định URL đầy đủ, như: http: //localhost/hello.jpg. Không có hình ảnh nào hiển thị nếu tôi sử dụng: hello.jpg, /hello.jpg, hoặc ../hello.jpg. Và tệp .xap của tôi nằm trong thư mục/ClientBin. –

+2

Dường như tất cả các URI tương đối có liên quan đến vị trí tệp XAP (thư mục ClientBin thường) và Silverlight nối thêm vùng tên. Cách giải quyết là đi tuyệt đối như sau: new Uri (App.Current.Host.Source, "../hello.jpg"); –

2

img.Source = new BitmapImage (image uri) phải hoạt động.

2

img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative)); sẽ phân giải chính xác vào thư mục gốc của ứng dụng Silverlight khi "../images/my-image.jpg" sẽ không hoạt động.

Điều này chỉ đúng trong mã sau khi thiết lập động nguồn của hình ảnh.Bạn không thể sử dụng ký hiệu này (dấu "/" để chỉ định thư mục gốc) trong XAML (đi theo trang, hy vọng chúng sửa lỗi đó)

2

Mã bên dưới chỉ làm việc khi hình ảnh được đưa vào dự án dưới dạng tệp tài nguyên :

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

Tôi không thể truy cập URL từ URL tuyệt đối. Thậm chí không phải URL trang trại của Flickr cho hình ảnh.

+0

Bạn chỉ có thể thực hiện các kết nối http tới tài nguyên trên máy chủ nơi XAP của bạn hoạt động trừ khi bạn đang chạy dưới dạng ứng dụng đáng tin cậy, phải không? – 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

tên tệp hình ảnh đẹp được chèn vào đó: D – pearcewg

Các vấn đề liên quan