Я следил за видео Тима Хойера о динамической загрузке других XAP (в «главное» приложение Silverlight), а также за некоторыми другими ссылками для настройки загрузки ресурсов, и я застрял на конкретной проблеме загрузки ресурсов стиля из динамически загружаемого XAP (т.е. содержимое Assets \ Styles.xaml). Когда я запускаю приложение master / hosting, оно успешно передает динамический XAP, и я могу читать информацию о развертывании и т. Д. И загружать части сборки. Однако, когда я действительно пытаюсь создать экземпляр формы из динамического XAP, он терпит неудачу.
Не удается найти ресурс с именем / ключом LayoutRootGridStyle
который находится в файле Assets \ Styles.xaml (он работает, если я запускаю его напрямую, поэтому я знаю, что все в порядке). По какой-то причине они не отображаются как ресурсы приложения - не уверен, что я ошибся концом палки или просто что-то упустил? Фрагмент кода ниже (извините, он немного запутан - просто пытаюсь сначала заставить его работать) ...
'' # Here's the code that reads the dynamic XAP from the web server ...
'' #...
wCli = New WebClient
AddHandler wCli.OpenReadCompleted, AddressOf OpenXAPCompleted
wCli.OpenReadAsync(New Uri("MyTest.xap", UriKind.Relative))
'' #...
'' #Here's the sub that's called when openread is completed
'' #...
Private Sub OpenXAPCompleted(ByVal sender As Object, ByVal e As System.Net.OpenReadCompletedEventArgs)
Dim sManifest As String = New StreamReader(Application.GetResourceStream(New StreamResourceInfo(e.Result, Nothing), New Uri("AppManifest.xaml", UriKind.Relative)).Stream).ReadToEnd
Dim deploymentRoot As XElement = XDocument.Parse(sManifest).Root
Dim deploymentParts As List(Of XElement) = _
(From assemblyParts In deploymentRoot.Elements().Elements() Select assemblyParts).ToList()
Dim oAssembly As Assembly = Nothing
For Each xElement As XElement In deploymentParts
Dim asmPart As AssemblyPart = New AssemblyPart()
Dim source As String = xElement.Attribute("Source").Value
Dim sInfo As StreamResourceInfo = Application.GetResourceStream(New StreamResourceInfo(e.Result, "application/binary"), New Uri(source, UriKind.Relative))
If source = "MyTest.dll" Then
oAssembly = asmPart.Load(sInfo.Stream)
Else
asmPart.Load(sInfo.Stream)
End If
Next
Dim t As Type() = oAssembly.GetTypes()
Dim AppClass = (From parts In t Where parts.FullName.EndsWith(".App") Select parts).SingleOrDefault()
Dim mykeys As Array
If Not AppClass Is Nothing Then
Dim a As Application = DirectCast(oAssembly.CreateInstance(AppClass.FullName), Application)
For Each strKey As String In a.Resources.Keys
If Not Application.Current.Resources.Contains(strKey) Then
Application.Current.Resources.Add(strKey, a.Resources(strKey))
End If
Next
End If
Dim objectType As Type = oAssembly.GetType("MyTest.MainPage")
Dim ouiel = Activator.CreateInstance(objectType)
Dim myData As UIElement = DirectCast(ouiel, UIElement)
Me.splMain.Children.Add(myData)
Me.splMain.UpdateLayout()
End Sub
'' #...
'' # And here's the line that fails with "Cannot find a Resource with the Name/Key LayoutRootGridStyle"
'' # ...
System.Windows.Application.LoadComponent(Me, New System.Uri("/MyTest;component/MainPage.xaml", System.UriKind.Relative))
'' #...
Просто чтобы повторить, есть 3 сценария, которые следует рассмотреть ... 1) Динамически загружаемые ресурсы стиля XAP остаются в объединенном словаре ресурсов (в отдельном файле xaml), на который ссылается app.xaml динамически загружаемого приложения Silverlight (XAP) - При запуске главного приложения ресурсы динамического XAP не отображаются в текущем приложении (после загрузки частей сборки XAP). Произошла ошибка.
2) Динамически загружаемые ресурсы стиля XAP перемещаются из объединенного словаря ресурсов (из отдельного файла xaml) в app.xaml динамического приложения вместо ссылки на объединенный словарь ресурсов. - При запуске главного приложения ресурсы из динамического XAP DO кажутся присутствующими в текущем приложении (после загрузки частей сборки XAP). Однако ошибка все равно возникает.
3) Динамически загружаемые ресурсы стиля XAP копируются в app.xaml вызывающего / главного приложения (нежелательно). - Ошибка больше не возникает.