c# - 在 RichEditBox UWP 中显示行号

标签 c# xaml uwp text-editor richeditbox

我想知道是否可以在 UWP C# 中显示 RichEditBox 的行号(在单独的列中) ,或者如果有其他方法可以得到它。 我正在寻找这个问题的解决方案......我觉得很奇怪,没有关于它的文档:我只需要一个简单的文本编辑器。 有很多适用于 Windows 10 的应用程序实现了它,我拒绝认为这是不可能的。

enter image description here

这只是代码编辑器应用程序 CodeWriter 中的一个示例。 有什么想法吗?

最佳答案

我在考虑列表和 RichEditBox 时获得了“结果”。现在,解决方案并不好,在输入大约 50 行之后,它变得非常卡顿,但至少我试过了,因为这个问题对我来说也很重要。

所以,我在一个两列的Grid中设计了一个ListView和RichEditBox

<ScrollViewer>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <ListView Grid.Column="0" Name="LineNumbers" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled"></ListView>
        <RichEditBox Grid.Column="1" x:Name="RebText" TextChanged="RebText_TextChanged" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled"></RichEditBox>
    </Grid>
</ScrollViewer>

在后面的代码中我添加了这个:

private void RebText_TextChanged(object sender, RoutedEventArgs e)
{
    //Clear line numbers
    LineNumbers.Items.Clear();
    int i = 1;

    //Get all the thext
    ITextRange text = RebText.Document.GetRange(0, TextConstants.MaxUnitCount);
    string s = text.Text;

    if (s != "\r")
    {
        //Replace return char with some char that will be never used (I hope...)
        string[] tmp = s.Replace("\r", "§").Split('§');
        foreach (string st in tmp)
        {
            //String, adding new line
            if (st != "")
            {
                LineNumbers.Items.Add(i++);
            }
            //No string, empty space
            else
            {
                LineNumbers.Items.Add("");
            }                      
        }
    }
}

我认为 .clear() 方法和每次都读取所有行不是一个好的做法。但是,如果您需要一个最多 50 行的快速解决方案,这也许就是方法。

关于c# - 在 RichEditBox UWP 中显示行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44107753/

相关文章:

c# - 如何延迟 Button.Flyout 的出现?

c# - 窗口标题文本颜色的主题资源是什么?

c# - 用于 Web 服务的 WCF 客户端,具有 WS-Security、签名 header 、身份验证 token 和正文加密

c# - IDataErrorInfo - 它是如何工作的

c# - 从独立存储加载的图像根本不具有约束力

wpf - 设置 GroupBox 的样式

c# - 如何在 MVC 3 中将 WebForms .ascx 显示为局部 View

c# - 使用 SmartThreadPool MaxThreads=5 仍然看到更多

c# - 具有多个控件的列表框

c# - 如何在 Windows Universal 10 App 中无异常地获取 StackTrace