web-dev-qa-db-ja.com

Silverlight画像:URLを動的にロードしますか?

私はSilverlight2.0をいじっています。

いくつかの画像がありますが、現在、画像ソースの静的URLがあります。コントロールをホストしているサイトのURLパスから画像を動的にロードする方法はありますか?

または、URLのベースパスを保持する、単一の場所に保存された構成設定で、各イメージがファイル名のみを保持するようにしますか?

13
pearcewg

コードビハインドまたは値コンバーターで実行できます

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

私が収集したものから、あなたは画像自体を動的に変更しようとしているのではなく、実行時に画像の場所を正しく決定しようとしています。

画像の相対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 /ディレクトリに配置する必要があります。必ずしも便利ではありません。

回避策は、次のように絶対URIを使用することです。

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

16
Craig Nicholson
// 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));  
6
Malcolm Swaine

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);
4
Dan Wygant

img.Source = new BitmapImage(image uri)が機能する必要があります。

2
NinethSense

img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative));はSilverlightアプリケーションのルートに適切に解決されますが、「../ images /my-image.jpg」は解決されません。

これは、画像のソースを動的に設定する場合のコードビハインドにのみ当てはまります。 XAMLではこの表記(ルートを指定するための「/」)を使用することはできません(fiquireに移動し、修正されることを願っています)

2
mknopf

SilverlightHost.Source は、XAPファイルのロードに使用されたURLを提供します。これを使用して、画像の相対URLを作成できます。

たとえば、XAPが http://foo.bar/ClientBin/bas.xap でホストされ、画像が http:/に保存されている場合/foo.bar/Images/ Sourceを使用して、ホスト名とプロトコルを取得し、新しいURIを作成できます。

2
Aaron Weiker

以下のコードは、画像がリソースファイルとしてプロジェクトに含まれている場合にのみ機能しました。

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

絶対URLからURLにアクセスできません。 Flickrの画像のファームURLでさえありません。

2
JewelThief