【发布时间】:2012-11-06 23:00:40
【问题描述】:
我已将 XAML 文件添加到 Windows Phone 8 项目中。它的构建动作是“Page”。我想将 XAML 作为文本字符串加载(以输入 XamlReader.Load())。我怎样才能做到这一点?
它不能作为 XAP 包中的单独文件提供;它可能在 DLL 中的某个地方。
【问题讨论】:
标签: silverlight xaml windows-phone windows-phone-8
我已将 XAML 文件添加到 Windows Phone 8 项目中。它的构建动作是“Page”。我想将 XAML 作为文本字符串加载(以输入 XamlReader.Load())。我怎样才能做到这一点?
它不能作为 XAP 包中的单独文件提供;它可能在 DLL 中的某个地方。
【问题讨论】:
标签: silverlight xaml windows-phone windows-phone-8
当设置为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 文件的根元素是 Page)。
然后您可以使用XamlWriter 将Page 序列化为XAML 字符串:
string xaml = XamlWriter.Save(rootObject);
请注意,这是System.Windows.Markup 命名空间中的XamlWriter,而不是System.Xaml。如果您的 XAML 具有 WPF 类型,则应使用此 XamlWriter 以避免错误。
【讨论】: