我想知道是否可以在UWP C#中显示RichEditBox的行号(在单独的列中) ,或者是否有其他方法可以获得它。我正在寻找解决这个问题的方法......而且对我来说似乎很奇怪,没有关于它的文档:我只需要一个简单的文本编辑器。有很多适用于 Windows 10 的应用程序实现了它,我拒绝认为这是不可能的。
这只是代码编辑器应用程序 CodeWriter 的一个示例。任何想法?
我想知道是否可以在UWP C#中显示RichEditBox的行号(在单独的列中) ,或者是否有其他方法可以获得它。我正在寻找解决这个问题的方法......而且对我来说似乎很奇怪,没有关于它的文档:我只需要一个简单的文本编辑器。有很多适用于 Windows 10 的应用程序实现了它,我拒绝认为这是不可能的。
这只是代码编辑器应用程序 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 行的快速解决方案,那么这可能就是您的选择。