簡體   English   中英

保存同時包含圖像和自定義標記元素的RichTextBox內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM