Я следил за видео Тима Хойера для динамической загрузки других 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 вызывающего / главного приложения (не желательно). - Ошибка больше не возникает.