我已将XAML文件添加到Windows Phone 8项目中。它的构建动作是" Page"。我想将XAML作为文本字符串加载(以提供给XamlReader.Load()
)。我怎么能做到这一点?
它不能作为XAP包中的单独文件使用;它可能在DLL的某个地方。
答案 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
)。
然后,您可以使用Page
将XamlWriter
序列化为XAML字符串:
string xaml = XamlWriter.Save(rootObject);
请注意,这是XamlWriter
命名空间中的System.Windows.Markup
,而非System.Xaml
。如果您的XAML具有WPF类型,那么您应该使用此XamlWriter
来避免错误。