我有一個數據集合需要轉換爲.xaml文件,稍後可以將其作爲FlowDocument加載到FlowDocumentReader中。我不直接實例化Paragraphs,Runs,而是生成xaml以稍後創建文檔。使用XmlWriter寫出帶名稱空間的FlowDocument xaml
我已經試過什麼:
我通過數據重複,段落創建XElements,運行,InlineUIContainers等,並建立了FlowDocument的結構就好了,然後調用:
XmlWriter writer = XmlWriter.Create("output.xaml");
flowDocElem.WriteTo(writer);
writer.Close();
在消費應用程序,我這樣做:
flowDocument = XamlReader.Load(xamlFile) as FlowDocument;
flowDocumentReader.Document = flowDocument;
xamlFile.Close();
但加載失敗,因爲它不知道什麼是FlowDocument。該FlowDocument的元素看起來像這樣:
<FlowDocument Name="testDoc">
(有沒有命名空間有棚光以什麼FlowDocument的是,當它在被讀取。)
如果我手工編輯的.xaml和修改元素是:
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Name="testDoc">
然後,它會加載就好了。
當創建的XElement的FlowDocument的,我試着這樣做:
new XElement("FlowDocument", new XAttribute("Name", "testDoc"), new XAttribute("xmlns", "http://schemas.microsoft.com/winfx/2006/xaml/presentation"));
但是,這並不工作,要麼 - 如果我試圖創建命名空間屬性給我一個錯誤。
我完全可以欺騙和東西,的xmlns入元素,然後調用類似
File.WriteAllText("output.xaml", fixedTxt);
但感覺髒,所以我想我只是簡單的做是錯誤的。
想法?
更新:
雖然這可能不是指令性的解決問題的方法,它確實工作:
通過添加ParserContext到XamlReader,我是能夠通過加載FlowDocument xml來解決問題。
FileStream xamlFile = new FileStream("output.xaml", FileMode.Open, FileAccess.Read);
XamlReader x = new XamlReader();
ParserContext parserContext = new ParserContext();
parserContext.XmlnsDictionary.Add("","http://schemas.microsoft.com/winfx/2006/xaml/presentation");
flowDocument = XamlReader.Load(xamlFile, parserContext) as FlowDocument;
flowDocumentReader.Document = flowDocument;
xamlFile.Close();