2009-07-16 78 views
1

好吧,我試圖添加一個「自定義屬性」到RichTextBox控件中的一段文本。我認爲這很容易,但顯然不是:-)WPF RichTextBox自定義文本屬性

我想要的基本功能是能夠設置特定單詞的屬性,並能夠檢測,當一個單詞被雙擊,如果該屬性有沒有。

我的初始方法是創建一個新的DP並將其應用於文本,但TextRange實際上並不是一個DependencyObject,反射器顯示它只接受某些DP直接映射到「真實」屬性。

不幸的是,我似乎無法找到任何其他「鉤子」讓我這樣做。我無法繼承任何我可以應用於文本的東西,因爲我需要的任何東西都是密封的,或者包含內部摘要,所以我有點不知所措。

我只能跟蹤具有外部屬性的範圍,並在文本更新時更新它,但這聽起來非常可怕,而且我真的不想爲此創建自己的RichTextBox特徵!

任何建議將是最受歡迎的:-)

回答

2

與RichTextBox的個人expierience瞭解到我,如果他們看起來很像這個控制可能結合起來運行,跨越,這意味着你將失去你試圖用設置自定義信息TextRange的。這發生了很多與TextRange重疊的區域。基本上,你不能使用TextRange來解決這個問題。

我們對這個控件有類似的問題,實際上我們最終得到了一些骯髒的黑客。以下是我們最終做的事:

您可以將InlineUIContainer和BlockUIContainer元素插入到FlowDocument中。在其中一個容器中,您可以放置​​任何您想要的UIElement ..我們最終創建了一個附加屬性,並將這些信息寶石放置在這些UIContainers中的控件控件中。

如果我們曾經需要的信息,我們查閱了最近的容器元素,提取信息,等瞧......它是一種拖累。我知道,但它的工作:) ..

一個問題,但..用戶可以手動刪除這些容器,只需按下刪除按鈕即可。但是,您可以使用Unloaded事件檢測到這種情況,在發生這種情況時會觸發這些事件。

+0

非常好..我試圖找到一個類似的「黑客」,讓我「注入」文件中的東西,但沒有設法找到任何東西。我會看看InlineUIContainer和BlockUIContainer ..謝謝! –

0

InlineUIContainers將而不是儘管保存在TextRange.Save調用XamlPackage,即使preserveTextElements爲true。我認爲你必須使用XamlWriter來保存InlineUIContainers,但是你失去了將圖像嵌入到文檔中的能力。

我還沒有找到一種方法來嵌入文件的自定義屬性,並能夠嵌入圖像。