如何加载并调用Xap包呢?步骤如下,另附步骤注释(供参考)
DynamicInvokeXap.Xaml
1 <UserControl x:Class="Silverlight2._0.DynamicInvokeXap"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300">
4 <Grid x:Name="LayoutRoot" Background="White">
5 <StackPanel>
6 <TextBox x:Name="LastNameSearch" Width="200" Height="25"/>
7 <Button Click="Button_Click" Content="Submit Search" Width="200" Height="25"></Button>
8 <StackPanel x:Name="Panel1"></StackPanel>
9 </StackPanel>
10 </Grid>
11 </UserControl>
动态加载加Xap代码:
2 webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
3 webClient.OpenReadAsync(new Uri("http://localhost/Silverlight.Web/ClientBin/SilverlightAttatch.xap"), UriKind.Relative);
有关于Uri地址:(这里有一个目录问题要注意一下)
1.如果你aspx在项目根目录,Uri("SilverlightAttatch.xap"),即可
2.如果你aspx在目录中 如:Project -- Folder -- X.aspx
建议直接用地址访问,不然会UriFormatException
new Uri("http://localhost/Silverlight.Web/ClientBin/SilverlightAttatch.xap")
再看看webClient_OpenReadCompleted事件是如何加载dll,以及相关dll调用.
Step 1: (具体相关内容参见:另附)
String appManifest = new StreamReader(Application.GetResourceStream(
new StreamResourceInfo(e.Result, null),
new Uri("AppManifest.xaml", UriKind.Relative)
).Stream).ReadToEnd();
另附:动态加载的appmanifest.xaml内容
<Deployment.Parts>
<AssemblyPart x:Name="SilverlightAttatch" Source="SilverlightAttatch.dll" />
<AssemblyPart x:Name="System.Windows.Controls.Data" Source="System.Windows.Controls.Data.dll" />
<AssemblyPart x:Name="System.Windows.Controls" Source="System.Windows.Controls.dll" />
</Deployment.Parts>
</Deployment>
Step 2:
XElement deploy = XDocument.Parse(appManifest).Root;
List<XElement> parts = ( from assemblyParts in deploy.Elements().Elements()
select assemblyParts
).ToList();
Step 3:
目的:1.是SilverlightAttatch.dll作为Assembly进行处理,直接load
2.对于其他dll作为assembly的一些reference,直接进行AssemblyPart的load
Assembly assebmly = null;
foreach (XElement xe in parts) {
String source = xe.Attribute("Source").Value;
AssemblyPart asmPart = new AssemblyPart();
StreamResourceInfo streamInfo = Application.GetResourceStream(
new StreamResourceInfo(e.Result, "application/binary"),
new Uri(source, UriKind.Relative));
if (source.Equals("SilverlightAttatch.dll")){
assebmly = asmPart.Load(streamInfo.Stream);
}
else{
asmPart.Load(streamInfo.Stream);
}
}
Step 4:
Panel1.DataContext = DynDataSource.GetCustomerInfos(LastNameSearch.Text);
创建一个UserControl实例
UIElement element = assebmly.CreateInstance("SilverlightAttatch.Page") as UIElement;
加载相应的Silverlight's UserControl
Panel1.Children.Add(element);
更新UI
Panel1.UpdateLayout();
Step 5:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
Step 6:(需要加载的Xap包中Page.xaml)
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data">
5 <Grid x:Name="LayoutRoot" Background="White">
6 <data:DataGrid x:Name="SearchResults" AutoGenerateColumns="True" ItemsSource="{Binding}"></data:DataGrid>
7 </Grid>
8 </UserControl>