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

c# - 在RichEditBox UWP中显示行号-LMLPHP

这只是代码编辑器应用程序CodeWriter的示例。
任何的想法?

最佳答案

我实现了关于列表和RichEditBox的“结果”思考。现在,解决方案不好,大约输入了50行后,解决方案变得很糟糕,但至少我尝试过,因为这个问题对我来说也很重要。

因此,我在具有两列的网格中设计了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/

10-09 18:38