2012-11-06 27 views
2

我已將XAML文件添加到Windows Phone 8項目。其構建操作是「頁面」。我想將XAML作爲文本字符串加載(輸入XamlReader.Load())。我怎樣才能做到這一點?構建爲「頁面」的XAML文件在哪裏去?

它不作爲XAP包中的單獨文件提供;它可能是DLL中的某個地方。

回答

3

當設置爲Page時,編譯器會將XAML編譯爲BAML,並將BAML文件作爲資源添加到程序集中。

如果您希望在運行時將原始XAML從BAML資源中取出,那麼您需要反序列化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來避免錯誤。

+0

修正了片段tx。 –