如何select TextBlock 控件的部分文本?

How to select part of the text of a TextBlock control?

我有一个 UWP 桌面应用程序,它有一个带有很长文本的 TextBlock 控件。该应用程序有一个搜索选项,用户可以在其中键入一个词,应用程序必须 select 该词在文本中的第一次出现。在 TextBox 中,这非常容易,因为 Select 方法采用两个整数作为参数。但在 TextBlock 的 Select 方法中,参数是 TextPointers。如何制作这个 selection?

您可以在 TextBlockTextHighlighters 中添加带有 TextRangeTextHighlighter,例如:

var wordToSelect = "long";
var index = tb.Text.IndexOf(wordToSelect);
if (index > -1)
{
    var textRange = new TextRange() { StartIndex = index, Length = wordToSelect.Length };
    var textHighlighter = new TextHighlighter();
    textHighlighter.Ranges.Add(textRange);
    tb.TextHighlighters.Add(textHighlighter);
}

XAML:

<TextBlock x:Name="tb" Text="some long text" />