我有這個WPF RichTextBox,我想以編程方式選擇給定範圍的字母/單詞並突出顯示它。我試過這個,但它不起作用,可能是因爲我沒有考慮一些隱藏的FlowDocument標籤或類似的東西。例如,我要選擇字母3-8 2-6,但被選中):以編程方式選擇WPF RichTextBox(FlowDocument)中的文本範圍
var start = MyRichTextBox.Document.ContentStart;
var startPos = start.GetPositionAtOffset(3);
var endPos = start.GetPositionAtOffset(8);
var textRange = new TextRange(startPos,endPos);
textRange.ApplyPropertyValue(TextElement.ForegroundProperty,
new SolidColorBrush(Colors.Blue));
textRange.ApplyPropertyValue(TextElement.FontWeightProperty,
FontWeights.Bold);
我已經意識到RichTextBox的處理比我想象:)
更新有點麻煩:我有一個在MSDN論壇上幾個答案:This thread其中「dekurver」 SEID:
的偏移你指定不 字符偏移量,但符號偏移。 你需要做的是得到一個 TextPointer,你知道是 相鄰文本,然後你可以添加字符 偏移量。
和「LesterLobo」說:
您需要遍歷 段落和行內找到 下一步,然後他們的偏移在循環 ,申請 的悉數亮相特定的文本。請注意,編輯 時,文字會移動,但您的 高光不會移動爲與 文字相關的偏移而不是 。然而,你可以創建一個自定義的 運行和 它提供的一大亮點......
仍舊愛看到一些這方面的示例代碼,如果有人知道他們的周圍FlowDocuments方式...
編輯我有一個版本的克拉茨VB代碼的工作,它看起來像這樣:
private static TextPointer GetPoint(TextPointer start, int x)
{
var ret = start;
var i = 0;
while (i < x && ret != null)
{
if (ret.GetPointerContext(LogicalDirection.Backward) ==
TextPointerContext.Text ||
ret.GetPointerContext(LogicalDirection.Backward) ==
TextPointerContext.None)
i++;
if (ret.GetPositionAtOffset(1,
LogicalDirection.Forward) == null)
return ret;
ret = ret.GetPositionAtOffset(1,
LogicalDirection.Forward);
}
return ret;
}
我用它是這樣的:
Colorize(item.Offset, item.Text.Length, Colors.Blue);
private void Colorize(int offset, int length, Color color)
{
var textRange = MyRichTextBox.Selection;
var start = MyRichTextBox.Document.ContentStart;
var startPos = GetPoint(start, offset);
var endPos = GetPoint(start, offset + length);
textRange.Select(startPos, endPos);
textRange.ApplyPropertyValue(TextElement.ForegroundProperty,
new SolidColorBrush(color));
textRange.ApplyPropertyValue(TextElement.FontWeightProperty,
FontWeights.Bold);
}
不錯!我有一個代碼工作的版本,將其添加到問題中。乾杯。 – 2009-09-28 14:48:27
這對於計算RichTextBox中的字符也很方便:只需執行循環,而「out」不爲空並在最後返回「i」。 – devios1 2010-08-09 01:18:56
這種方法讓我每一個字符後,我的任何指定的令牌後,我只需要它得到一個指向我的單詞的指針,因爲當我嘗試使它粗體例如它使整個句子後我的令牌「大膽」我只需要它來操作我的代幣! – a7madx7 2013-07-23 16:42:44