构建为“Page”的XAML文件在哪里?

时间:2012-11-06 23:00:41

标签: silverlight xaml windows-phone windows-phone-8

我已将XAML文件添加到Windows Phone 8项目中。它的构建动作是" Page"。我想将XAML作为文本字符串加载(以提供给XamlReader.Load())。我怎么能做到这一点?

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

1 个答案:

答案 0 :(得分:3)

设置为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)。

然后,您可以使用PageXamlWriter序列化为XAML字符串:

string xaml = XamlWriter.Save(rootObject);

请注意,这是XamlWriter命名空间中的System.Windows.Markup,而非System.Xaml。如果您的XAML具有WPF类型,那么您应该使用此XamlWriter来避免错误。