2012-07-20 56 views
1

我有一個WPF文本框(不是一個RichTextBox)和本框裏面,我想強調的(在網絡瀏覽器等)的搜索結果突出顯示文本框的文本,而不使用RichTextBox控件

例如,如果我搜索「 abc「,所有發生的」abc「應該被突出顯示(例如,用一些紅色背景或字體)

我想知道這是可能的,而不使用RichTextBox控件,或者不是真的嗎?

回答

0

這裏沒有內置功能。此外,TextBox僅支持整個文本的單一字體樣式。

如果文本應該是隻讀的,您可以使用流或固定文檔並在運行元素中格式化文本。

2

這是可能的,但它更容易使用RichTextBox,所以你可以考慮使用它,而且你不能改變字體大小,但只能改變顏色(背景和/或前景)和效果。

首先,您必須從TextBox派生自己的類,因爲您將覆蓋其渲染方法。現在覆蓋OnRender()方法,在這裏您將使用DrawingContext.DrawText()方法繪製文本(將所有內容放置在FormattedText對象內,主要您必須調整其屬性以使其類似於標準TextBox)。

現在你擁有的是一個普通的TextBox其中此外你畫你的文字。以此爲起點,你可以選擇:

  • 完全覆蓋TextBox文本繪製:設置TextBox.Foreground屬性Brushes.Transparent。用戶將與「真實」的文字互動,但他會看到你的平局。請注意,要完成這項工作,您必須準確地模仿原始TextBox中的文本如何繪製(例如,如果您更改字體大小,則它們將未對齊)。

  • 添加您需要的高亮功能,保留底部TextBox文字繪圖:計算您想要突出顯示的文字的位置,然後繪製適當的背景。

參考
這(簡化!)算法來自CodeBox2,它最初被設計爲一個TextBox一些簡單的編輯器類似的功能擴展。

+0

感謝您的回答!我嘗試了第一種方法(完全覆蓋文本繪圖) - 它工作正常,直到TextWrapping進場... 我不知道如何計算突出顯示的文本位置(另一種方法)。 – Zsolt 2012-07-25 08:53:12

+0

@Zsolt是它可能有點棘手,但您可以使用FormattedText(再次必須完全匹配TextBox設置),其中要突出顯示的文本位於正確的顏色/背景中,而其他所有內容都是透明的。 – 2012-07-25 10:02:52