gpt4 book ai didi

xaml - 在 XamlReader.Load() 加载的文件中成功引用 ResourceDictionary

转载 作者:行者123 更新时间:2023-12-01 15:43:31 27 4
gpt4 key购买 nike

我正在构建一个通用 WP7 程序集,它将显示我的应用程序的通用帮助/关于信息,每个应用程序程序集将指定一对 StackPanels,其中包含一些应用程序特定信息(称为 em Legal.xaml 和 WhatsNew.xaml)。

理想情况下,这些特定于应用程序的 XAML 文件应该是纯文本形式(而不是在代码中实例化的内容),以便可以通过 HTTP 或作为嵌入式资源字符串加载。

加载 XAML 工作正常,直到我尝试将一些样式定义分解到另一个文件中,然后 XamlReader.Load() 失败并显示一条注释:“属性 AboutPageDocs/CommonStyles.xaml 值超出范围。 [行:43 位置:45]”

加载 Legal.xaml 时会发生该错误,当我们查看 43 时,我们会发现我试图加载现在包含自定义样式的 ResourceDictionary 的位置:

<StackPanel.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="AboutPageDocs/CommonStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</StackPanel.Resources>

这是错误的......如果只是简单地复制并粘贴 StackPanel 代码(它在运行时动态加载)并将其放入用户控件......一切正常。

无需在 Legal.xaml 和 WhatsNew.xaml 中内联定义我的样式……有没有办法让 XamlReader.Load() 属性查找 CommonStyles.xaml?

考虑到 Source 路径不正确,我尝试通过两个程序集将 CommonStyles.xaml 的副本放置在不同位置……以及尝试使用 pack://uri 语法……到目前为止都无济于事.

我错过了什么?

最佳答案

当我意识到 XamlReader 能够在将引用的 XAML 文件指定为绝对路径时解析它们,因此我寻找了一种指定自己的上下文的可能性。

当我在调用 XamlReader.Load() 时指定 ParserContext 时,我发现这对我有用

public static FlowDocument ReadFlowDocument( FileInfo xamlFile )
{
// Specify a ParserContext.
// It's important to set BaseUri to the file itself
// not to its parent direcory!
ParserContext parserContext = new ParserContext();
parserContext.BaseUri = new Uri( xamlFile.ToString() );

// Create a stream from this file
FileStream stream = new FileStream( xamlFile.ToString(), FileMode.Open );

// Let the XamlReader load and parse the XAML. It will resolve any referenced ResourceDirectories
// specified with a relative path
return (FlowDocument) XamlReader.Load( stream, parserContext );
}

关于xaml - 在 XamlReader.Load() 加载的文件中成功引用 ResourceDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394208/

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