Es gibt in Silverlight einen initParameter für alles, ich würde aber gerne eigene Schlüsselwörter verwenden.<object type="application/x-silverlight"
width="100%" height="100%">
<param name="source" value="ClientBin/SLInitParams.xap"/>
<!-- startPage key can have values Page1 or Page2 -->
<param name="initParams" value="uid=0,token=asdg" />
</object>
Standard ist in den Parameter initParams, parameterliste zu übergeben ich finde es wäre schöner die paremter zu trennen,
und die Idee ist sowas zu verwenden,
<param name="uid" value="0" />
<param name="token" value="ABFGX00121" />
zu nutzen und hier ist die Lösung, ihr könnt es weiter anpassen, dazu muss das div-tag oder object-tag das id=silverlightControlHost Attribute enthalten. Die Params klasse muss bei OnStartup initialisiert werden und die Parameter stehen global zur Verfügung.
/// <summary>
/// App_Sturtup
/// Params.Current.OnStartup(e);
/// use: Params.Current.InitParams["uid"];
/// </summary>
public sealed class Params
{
static readonly Params instance = new Params();
public IDictionary<string, string>
InitParams { get; private set; }
public static Params Current
{
get
{
return instance;
}
}
public Params()
{
}
/// <summary>
/// einlesen des InitParams parameters
/// </summary>
/// <param name="e"></param>
public void OnStartup(StartupEventArgs e)
{
Params.Current.InitParams = e.InitParams;
Params.Current.OnParamsFromSilverlightObject("silverlightControlHost");
}
public string OnParamsFromHtmlElementAttribute(string elementId, string attribute)
{
HtmlElement element = System.Windows.Browser.HtmlPage.Document.GetElementById(elementId);
if (element != null)
{
return element.GetAttribute(attribute);
}
return null;
}
/// <summary>
/// Einlesen der Parameter aus param
/// </summary>
/// <param name="elementId">parent of object oder object Html-Tag Id</param>
public void OnParamsFromSilverlightObject(string elementId)
{
HtmlElement element = System.Windows.Browser.HtmlPage.Document.GetElementById(elementId);
if (element != null)
{
if (element.TagName.ToLower() == "object")
{
OnHandleHtmlObject(element);
}
else
{
foreach (var item in element.Children)
{
var he = item as HtmlElement;
if (he != null && he.TagName.ToLower() == "object")
{
OnHandleHtmlObject(he);
}
}
}
}
}
void OnHandleHtmlObject(HtmlElement element)
{
if (element.TagName.ToLower() != "object")
{
throw new NullReferenceException("element");
}
foreach (var item in element.Children)
{
var he=item as HtmlElement;
if (he == null || (he != null && he.TagName.ToLower() != "param"))
{
continue;
}
if (!Params.Current.InitParams.ContainsKey(item.GetProperty("name").ToString()))
{
Params.Current.InitParams.Add(item.GetProperty("name").ToString(),
item.GetProperty("value").ToString());
}
}
}
}