我需要获取 WPF .NET 6 RichTextBox 末尾的光标位置,以便选择和更改每个附加行的字体

问题描述 投票:0回答:0

在我的应用程序中,我有一个带有只读 RichTextBox 的简单窗口。我正在使用 WPF、.NET 6。窗口的目的只是显示应用程序使用的可插入文件的格式化信息。

当窗口启动时,RichTextBox 会以编程方式填充各种可插入文件类型的粗体类别标题,后面是较小普通字体的该类型的文件列表。我实现此目的的方法是将文本附加到 RichTextBox,然后选择附加的文本,然后设置选择字体依赖属性,效果很好。我遇到的问题是在附加文本后选择每一行文本。我尝试过两种方法:

我尝试了几种方法,如“您尝试了什么以及您期望什么?”中所示。部分。

这两种方法的问题是,随着添加更多行,选择的范围也会越来越多。我假设这是因为我的方法使用原始文本而不是 RichTextBox 中的标记。

我已经做了所有我能想到的搜索排列,但都无济于事。任何帮助将不胜感激。

我尝试实现我自己的 WinForms RichTextBox.GetFirstCharIndexOfCurrentLine() 版本,如下所示:

public int GetFirstCharIndexOfCurrentLine()
{
    int index = 0;

    TextRange textRange = new TextRange(
        Document.ContentStart,
        Document.ContentEnd
    );

    var alltext = textRange.Text;

    string[] lines = alltext.Replace("\n", "").Split('\r');

    int lineIndex = lines.Length - 1;

    if (lineIndex > lines.Count())
    {
        throw new ArgumentOutOfRangeException("lineIndex");
    }

    for (int i = 0; i < lineIndex; i++)
    {
        index += lines[i].Length;
    }

     return index;
}

并且,我尝试按如下方式选择该行的文本:

public void Select(string text)
{
    TextRange textRange = new TextRange(Document.ContentStart, Document.ContentEnd);
    string alltext = textRange.Text;

    int index = alltext.IndexOf(text);

    if (index < 0)
    {
        return;
    }

    Select(index, text.Length);
}
c# wpf .net-6.0 richtextbox
© www.soinside.com 2019 - 2024. All rights reserved.