gpt4 book ai didi

silverlight - 创建表单实例时,XAML 解析器无法在动态加载的 XAP 中找到资源

转载 作者:行者123 更新时间:2023-12-03 21:26:42 25 4
gpt4 key购买 nike

我已经关注了 Tim Heuer 的视频,用于动态加载其他 XAP(到“主”Silverlight 应用程序中),以及一些其他链接来调整资源的加载,并陷入了从动态加载的内部加载样式资源的特定问题XAP(即 Assets\Styles.xaml 的内容)。当我运行主/托管应用程序时,它成功地流式传输动态 XAP,我可以读取部署信息等并加载组件部分。但是,当我实际尝试从 Dynamic XAP 创建表单实例时,它失败了

Cannot find a Resource with the Name/Key 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 文件中),从动态加载的 Silverlight 应用程序 (XAP) 的 app.xaml 引用 - 运行主应用程序时,动态 XAP 中的资源在当前应用程序下似乎不存在(加载 XAP 装配部件后)。发生错误。

2) 将动态加载的 XAP 样式资源从合并资源字典(来自单独的 xaml 文件)移动到动态应用程序的 app.xaml 中,代替合并资源字典引用。 - 运行主应用程序时,来自动态 XAP DO 的资源似乎存在于当前应用程序下(加载 XAP 组件后)。但是,错误仍然发生。

3) 将动态加载的XAP 的样式资源复制到调用/主应用程序的app.xaml 中(不可取)。 - 错误不再发生。

最佳答案

bykinag 在 silverlight forums 上提供的答案...

我在加载程序集后添加了以下行。

App.Current.Resources.MergedDictionaries.Add(New ResourceDictionary() With {.Source = New Uri("/MyTest;component/Assets/Styles.xaml", UriKind.RelativeOrAbsolute)})

我现在有一个问题,动态应用程序似乎无法看到其中的其他页面(找不到页面),但如果我无法解决它,我可能会单独提出这个问题。

关于silverlight - 创建表单实例时,XAML 解析器无法在动态加载的 XAP 中找到资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com