Отображение номеров строк в RichEditBox UWP

Я хотел бы знать, возможно ли показать номера строк (в отдельном столбце) RichEditBox в UWP C#, или есть ли другие способы получить его. Я ищу решение этой проблемы... И мне кажется странным, что нет документации об этом: мне нужен только простой текстовый редактор. Есть много приложений для Windows 10, которые реализуют это, и я отказываюсь думать, что это невозможно.

Это всего лишь пример из CodeWriter, приложения для редактирования кода. Любая идея?

1 ответ

Я достигаю "результата", думая о списке и 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 линиях, это МОЖЕТ быть способом.

Другие вопросы по тегам