我已将 XAML 文件添加到 Windows Phone 8 项目。它的构建动作是“Page”。我想将 XAML 作为文本字符串加载(输入XamlReader.Load()
)。我怎样才能做到这一点?
它在 XAP 包中不作为单独的文件提供;它可能在 DLL 中的某个地方。
我已将 XAML 文件添加到 Windows Phone 8 项目。它的构建动作是“Page”。我想将 XAML 作为文本字符串加载(输入XamlReader.Load()
)。我怎样才能做到这一点?
它在 XAP 包中不作为单独的文件提供;它可能在 DLL 中的某个地方。
当设置为Page
时,编译器会将 XAML 编译为 BAML,并将 BAML 文件作为资源添加到程序集。
如果您希望在运行时从 BAML 资源中取回原始 XAML,则需要反序列化 BAML,然后将对象序列化为 XAML。
您可以查看Baml2006Reader,或者更好的选择是使用Application.LoadComponent
该InitializeComponent
方法内部使用的内容。InitializeComponent
由部分生成的类为您的 XAML 代码调用。
var uri = new Uri("/MyAppName;component/MyXaml.xaml", //Note extension: XAML, not BAML
UriKind.Relative);
Page rootObject = new Page(); //Assuming XAML root element is Page - it could be anything
Application.LoadComponent(rootObject, uri);
(假设 XAML 文件的根元素是 a Page
)。
然后,您可以Page
使用以下命令将 序列化为 XAML 字符串XamlWriter
:
string xaml = XamlWriter.Save(rootObject);
请注意,这是命名空间XamlWriter
中的System.Windows.Markup
,而不是System.Xaml
. 如果您的 XAML 具有 WPF 类型,那么您应该使用它XamlWriter
来避免错误。