Paso de parámetros de inicialización a aplicaciones Silverlight 2

viernes, 31 de octubre de 2008

Para incrustar objetos Silverlight en nuestras páginas web tenemos 3 vías:

- Utilizando el fichero silverlight.js
- Utilizando el Tag HTML Object
- Utilizando el control asp.net <asp:silverlight>

Para pasar parámetros de inicialización tenemos que:

- En el tercer caso se dispone de la propiedad InitParameters



<asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/SilverlightApplication2.xap" MinimumVersion="2.0.31005.0" Width="100%" Height="100%" InitParameters="key1=value1,key2=value2,key3=value3nnnnnnnnn" />

- En el segundo caso hay que pasar un tag param con el nombre initParams



<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/SilverlightApplication2.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="key1=value1,key2=value2,key3=value3nnnnnnnnn" />

<a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
</a>
</object>



Bien, ahora que sabemos como pasar parametros de inicialización, solo nos queda explorar las diferentes formas de obtenerlos.

- Dentro de cualquier parte de la aplicación silverlight, ya sea el app o cualquier página podemos obtenerlos directamente usando:


object miparam = System.Windows.Browser.HtmlPage.Plugin.GetProperty("initParams");
string sParameters = (miparam != null) ? miparam.ToString() : "parametro no encontrado";
//sParameters obtendría el valor "key1=value1,key2=value2,key3=value3nnnnnnnnn"


Dentro de App.xml.cs disponemos del evento Application_Startup, el cual recibe en propiedad InitParams del argumento llamado e un conjunto de claves-valor con el string correctamente convertido en un objeto IDictionary<string, string>

private void Application_Startup(object sender, StartupEventArgs e) {
string p1 = e.InitParams["key1"];
...
this.RootVisual = new Page();
...
}

Nota de diseño:

- Ya que en el método Application_Startup se obtienen los parámetros de inicialización correctamente parseados, podríamos sobrecargar el constructor de las páginas a mostrar para que puedan recibir un objeto diccionario.

private void Application_Startup(object sender, StartupEventArgs e) {
this.RootVisual = new Page(e.InitParams);
}


namespace SilverlightApplication2{

public partial class Page : UserControl {

public Page(){
InitializeComponent();
}

IDictionary<string, string> initParams;

public Page(IDictionary<string, string> parameters){
initParams = parameters;
}

...
}
}


- FIN -

0 comentarios: