Silverlight og dynamiske parametre.

Jeg har hertil aften prøvet kræfter med at lave en lyd afspiller i Silverlight 2.0. Selve det, at få lyd igennem med Silverlight er som at klø sig i nakken. Du trækker et MediaElement ind på din design flade og peger på en fil – bingo!

Det jeg måtte kæmpe lidt med var, at få født min lyd afspiller med en dynamisk parameter. F.eks kunne jeg have interesse i at give min afspiller en querystring parameter med en reference til en lydfil. Endnu bedre kunne det være hvis jeg kunne slippe helt for at skulle bruge en querystring.

Du tilgår hele siden ved hjælp af:

 System.Windows.Browser.HtmlPage

På netop HtmlPage klassen findes der forskellige muligheder til at tilgå hele HTML DOM’en på. Men det var jeg som sagt ikke specielt interesseret i.

Man kan hoste en Silverlight xap fil igennem HTML (object) eller via en server control (som i sidste ende bliver til HTML):

 System.Web.UI.SilverlightControls.Silverlight

På Silverlight kontrollen findes der en attribut ved navn InitParameters som er af typen IDictionary<string,string>. Det var lige det jeg havde brug for. Nu kan bare skrive filnavnet ind på den lydfil jeg ønsker min silverlight applikation skal loade.

 <asp:Silverlight 
  InitParameters="fullmedianame=guestbook.mp3" 
  ID="sl1" 
  runat="server" 
    Source="~/ClientBin/SilverlightApplication1.xap" 
  MinimumVersion="2.0.31005.0" />
<br />
<asp:Silverlight 
   InitParameters="fullmedianame=intro.mp3" 
  ID="sl2" 
  runat="server" 
    Source="~/ClientBin/SilverlightApplication1.xap" 
  MinimumVersion="2.0.31005.0" />

 

I min App fil på mit silverlight projekt har jeg bare tilføjet en IDictorynay og senere på selve Silverlight kontrollen loader jeg så filen ind i et usynligt mediaelement.

 //App.xaml.cs
internal static IDictionary<string, string> InitParams;
private void Application_Startup(object sender, StartupEventArgs e) {
  InitParams = e.InitParams;
   this.RootVisual = new Page();
}

 

 //Page.xaml.cs
public partial class Page : UserControl
{
   public const String websiteUrl = "https://localhost:13354/Audio/";
  private String _fullMediaName = App.InitParams[ "fullmedianame" ];
  public Page() {
      InitializeComponent();
   }
 private void mediaFile_DownloadProgressChanged(object sender, RoutedEventArgs e) {
       mediaProgress.Value = ( ( (MediaElement) sender ).DownloadProgress * 100 );
  }
 private void Button_Click(object sender, RoutedEventArgs e) {
        mediaFile.Source = new Uri( String.Concat( websiteUrl, _fullMediaName ) );
   }
}

 

Skal du tilføje Silverlight xap filen ved hjælp af HTML gør du bare således:

 <object id="slContainer" data="data:application/x-silverlight-2," type="application/x-silverlight-2">
 <param name="source" value="ClientBin/SilverlightApplication1.xap" />
 <param name="onerror" value="onSilverlightError" />
 <param name="background" value="white" />
 <param name="minRuntimeVersion" value="2.0.31005.0" />
 <param name="autoUpgrade" value="true" />
 <param name="InitParams" value="fullmedianame=guestbook.mp3" />
 <a href="https://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
     <img src="https://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
         style="border-style: none" />
 </a>
</object>

 

Så lærte jeg også lidt idag!