[英]Save RichTextBox content containing both images and custom token elements
努力解決如何成功保存和加載包含以下所有內容的System.Windows.Controls.RichTextBox內容:格式化的文本,圖像,自定義類型定義的標記元素,自定義動態標記元素。
通過標記元素,我的意思是我的自定義類繼承自System.Windows.Documents.Run,其中類型定義為此類,因此無需記住任何動態設置的屬性值(因為基於加載后需要記住的類型采取了操作) )和動態屬性,這樣還需要保留動態設置的屬性(不僅基於類型,而且還基於這些設置值來執行操作)。
我知道以下3種保存/加載方法,這兩種方法都不足夠:
1)
string xamlStream = System.Windows.Markup.XamlWriter.Save(myRichTxtBx.Document);
然后保存字符串
2)
TextRange content = new TextRange(myRichTxtBx.Document.ContentStart, myRichTxtBx.Document.ContentEnd);
content.Save(myFileStream, DataFormats.XamlPackage, true);
3)
TextRange content = new TextRange(myRichTxtBx.Document.ContentStart, myRichTxtBx.Document.ContentEnd);
content.Save(myFileStream, DataFormats.Xaml, true);
這些是這些問題:
1)重新啟動應用程序后無法加載圖像(但記住屬性)
2)不記得屬性(但是能夠在重新啟動應用程序后加載圖像)
3)即使在同一應用程序實例中也不會加載圖像,並且也不記得屬性值
我只能找到解決圖像保存問題(2)或屬性問題(1)的答案,但不能同時解決這兩個問題。
目標是擁有可標記化的RichTextBox,其中標記可被基於提供的ORM對象(=類型定義的標記)的數據庫值替換,或由用戶再次基於提供的ORM對象動態設置值。
我已經通過一個非常丑陋的解決方法解決了這個問題:
為了保存文檔,我使用上述方法(1)。 在此之前,我通過自定義遍歷器遍歷FlowDocument,並用自定義內嵌標記元素替換每個圖像元素(與其他標記非常相似)。 哈希ID被分配為該替換元素的屬性,並且以哈希作為文件名保存圖像本身(用於與圖像文件一起標識令牌)。 圖像與主文檔(通過方法(1)保存)一起被打包到一個文件中。
重新加載所有內容時,將解包軟件包,並使用先前的自定義walker和已建立的哈希令牌文件,再次使用保留在軟件包中的文件中的實際圖像替換加載的文件,以保留其令牌和其屬性,並替換圖像元素。關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.