Eto: [WPF] RichTextArea 选择无法正常工作

创建于 2018-10-04  ·  7评论  ·  资料来源: picoe/Eto

预期行为

根据定义的范围正确选择文本。

实际行为

右侧有 5 个字符错位。

重现问题的步骤

  1. 创建 RichTextArea 控件
  2. 输入一些文字
  3. 定义选择以设置其颜色

演示问题的代码

rtfcontrol.Appen(initialtext, true);
rtfcontrol.Append(sometext, true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length - sometext.Length, rtfcontrol.Text.Length -1);
rtfcontrol.SelectionForeground = Colors.Blue;
rtfcontrol.Append("\n", true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length);

规格

  • 版本:2.5.0-ci-10013
  • 平台:WPF
  • 操作系统:Windows 10

WPF:

wpf

GTK2 (Linux):

gtk2_linux

Xamarin.Mac:

xamarin mac

最有用的评论

@DanWBR ,是的,不幸的是,它不会像您拥有的那样工作Text属性的末尾添加了一个换行符(无论您的文本是否包含它)。 在这一点上,我还没有找到解决方法,但这是一个与这个问题不同的问题。

我的建议是将当前位置保留在变量中,并在附加文本后增加它。 每次访问Text属性只是为了获取长度会随着文本变大而变慢。

所有7条评论

在 Windows 上,行结束字符以某种方式不计入选择索引。 我目前使用以下代码作为解决方法:

private void Write(string message, Color c)
        {
            Append(message + Environment.NewLine, true);

            int idx = -1, last = -1;
            if (Environment.OSVersion.Platform == PlatformID.Unix)
            {
                idx = Text.LastIndexOf(message);
                last = Text.Length;
            }
            else
            {
                var lines = string.Join("", Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
                idx = lines.LastIndexOf(message);
                last = lines.Length;
            }

            if (idx == -1)
                return;

            Selection = new Range<int>(idx, idx + message.Length);
            SelectionForeground = c;
            Selection = new Range<int>(last, last);
        }

但这绝对是一个错误......

是的,我之前使用过与@ManuelHu相同的 hack,它并不漂亮。 我还不确定如何有效地解决这个问题,而不会因为大文本而变得缓慢。

感谢您报告问题!

@DanWBR

这应该在最新的开发分支中修复。 你可以试一试吗? 在所有平台上,换行符现在都被视为单个\n字符。

@cwensley ,还有一个字符需要修复:

captura de tela 2018-11-16 as 08 06 39

@DanWBR ,你有一个问题的

https://github.com/DanWBR/dwsim5/blob/windows/DWSIM.UI.Desktop.Forms/Forms/Flowsheet/Flowsheet.eto.cs#L1245

也许我使用了错误的索引? 不过,它确实适用于 macOS 和 GTK。

@DanWBR ,是的,不幸的是,它不会像您拥有的那样工作Text属性的末尾添加了一个换行符(无论您的文本是否包含它)。 在这一点上,我还没有找到解决方法,但这是一个与这个问题不同的问题。

我的建议是将当前位置保留在变量中,并在附加文本后增加它。 每次访问Text属性只是为了获取长度会随着文本变大而变慢。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Serg-Norseman picture Serg-Norseman  ·  5评论

Krakean picture Krakean  ·  6评论

Xisrith picture Xisrith  ·  5评论

azunyuuuuuuu picture azunyuuuuuuu  ·  23评论

LaraSQP picture LaraSQP  ·  21评论