2

我已将 XAML 文件添加到 Windows Phone 8 项目。它的构建动作是“Page”。我想将 XAML 作为文本字符串加载(输入XamlReader.Load())。我怎样才能做到这一点?

它在 XAP 包中不作为单独的文件提供;它可能在 DLL 中的某个地方。

4

1 回答 1

3

当设置为Page时,编译器会将 XAML 编译为 BAML,并将 BAML 文件作为资源添加到程序集。

如果您希望在运行时从 BAML 资源中取回原始 XAML,则需要反序列化 BAML,然后将对象序列化为 XAML。

您可以查看Baml2006Reader,或者更好的选择是使用Application.LoadComponentInitializeComponent方法内部使用的内容。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来避免错误。

于 2012-11-06T23:23:28.603 回答