myb design

blog

備忘録: Silverlightでローディング中にプログレスバーを表示するために。

Downloading Content on Demand

Downloaderオブジェクトを使えば、指定したファイルを何%読み込んだかを取得したり、読み込み完了時のイベントを拾えたりするが、XAMLファイルを指定してもそこに記述されているリソースまでは含まれない(XAMLファイルを読み込み終わった時点でcompletedイベントが発生してしまう)。
この場合は、XAMLファイルとそれが参照しているリソースをZIPアーカイブにしておいて、DownloaderオブジェクトでZIPアーカイブを読み込むようにする。

追記: 2008.02.11

ZIPアーカイブ内の各リソースは、XAMLファイルでSourceを指定してあっても、DownloaderオブジェクトのcompletedイベントハンドラでいちいちSetSourceを呼んで関連づけないといけない。
function ContentLoaded(sender, args)
{
  var content = sender.getHost().content.createFromXamlDownloader(
    sender, "main.xaml"
  );
  sender.findName("container").children.add(content);
  content.findName("img01").setSource(sender, "images/img01.jpg");
  content.findName("bgm01").setSource(sender, "sounds/bgm01.mp3");
}
このとき、MediaElement(オーディオとかビデオ)オブジェクトにXAML上でSourceを指定してあると、SafariやMac版のFirefoxでは何故か再生されない(MediaFailedが発生する)ので、空にしておかないといけない。
(Imageオブジェクトは問題ない)
<MediaElement x:Name="bgm01" Source="" AutoPlay="False"/>

追記: 2008.02.19

Imageオブジェクトは問題ないと思ったけど、構成ファイル一覧で見るとNot Foundになっているので、やはりSourceは空にしておいた方がいいかもしれない。

trackbacks

trackback url:
http://www.mybdesign.com/blog/mt/mt-tb.cgi/11

leave your comment