我创建了一个 Silverlight 业务应用程序,它作为我的主要 silverlight 页面运行。对于“菜单”上的每个超链接按钮,我都会启动另一个 Silverlight 应用程序,该应用程序在 Visual Studio 中创建为不同的项目。这些是非业务应用程序。
一切运作良好。但是,我试图将一个值从我的主 SL 应用程序传递到内部的 SL 应用程序。我一直在谷歌上搜索,但找不到答案。据我了解,InitParam 在 ASP 和 SL 之间使用,而不是在 SL 应用程序之间使用。由于为第一个 SL 应用程序启动了应用程序配置,而第二个应用程序的应用程序配置从未启动,因此我无法使用它(至少这是我的理解)
我要传递的值是登录名和角色,可以从 Silverlight 业务应用程序中的 webcontext 中获取,但我无法在内部运行的非业务应用程序中获取 webcontext。
这就是我在主 SL 应用程序中启动我的 SL 应用程序的方式:
public Customers()
{
InitializeComponent();
this.Title = ApplicationStrings.CustomersPageTitle;
if (WebContext.Current.User.IsInRole("Users") || WebContext.Current.User.IsInRole("Administrators"))
{
WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(new Uri("customers.xap", UriKind.Relative));
}
}
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
string appManifest = new StreamReader(Application.GetResourceStream(new StreamResourceInfo(e.Result, null),
new Uri("AppManifest.xaml", UriKind.Relative)).Stream).ReadToEnd();
XElement deploymentRoot = XDocument.Parse(appManifest).Root;
List<XElement> deploymentParts =
(from assemblyParts in deploymentRoot.Elements().Elements() select assemblyParts).ToList();
Assembly asm = null;
AssemblyPart asmPart = new AssemblyPart();
foreach (XElement xElement in deploymentParts)
{
string source = xElement.Attribute("Source").Value;
StreamResourceInfo streamInfo = Application.GetResourceStream(new StreamResourceInfo(e.Result, "application/binary"), new Uri(source, UriKind.Relative));
if (source == "customers.dll")
{
asm = asmPart.Load(streamInfo.Stream);
}
else
{
asmPart.Load(streamInfo.Stream);
}
}
UIElement myData = asm.CreateInstance("customers.MainPage") as UIElement;
stackCustomers.Children.Add(myData);
stackCustomers.UpdateLayout();
}
任何人?