C# 可以编辑richtextbox中的单个单词吗?
我正在尝试创建一个文本编辑器,在输入文本时根据设置的规则对文本进行格式化。例如,特定(预定义)单词需要加下划线或涂上红色等,因此每次按下空格时,程序都会检查单词是否符合格式要求。问题是我不知道如何逐字编辑文本 我创建了一个监视要按下的空间的事件:C# 可以编辑richtextbox中的单个单词吗?,c#,wpf,formatting,richtextbox,C#,Wpf,Formatting,Richtextbox,我正在尝试创建一个文本编辑器,在输入文本时根据设置的规则对文本进行格式化。例如,特定(预定义)单词需要加下划线或涂上红色等,因此每次按下空格时,程序都会检查单词是否符合格式要求。问题是我不知道如何逐字编辑文本 我创建了一个监视要按下的空间的事件: private void MainTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Space) wordAnalyser.AnalyseWord
private void MainTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Space)
wordAnalyser.AnalyseWord();
}
(WordAnalyzer是WordAnalyzer类的一个实例)
在WordAnalyzer中,我得到了一个单词(另一个的代码,谢谢@King):
现在我想到的唯一解决办法就是把整个文本块去掉最后一个字,格式化,再贴上,然后把整个东西塞回文本框,但这是一种非常混乱的方式
我想知道是否有一种方法可以将单词直接格式化到richtextbox中,而不必触摸文本的其余部分。我是WPF的新手,所以不太熟悉它的功能,但我环顾四周,似乎没有人有过这个问题
有什么想法吗?可能是@Sach的复制品,谢谢,我不知道为什么我没有看到它!它解决了我一半的问题,但它使用的是事件文本更改,而不是按键-我希望能够在空间上触发它在空间上触发它的潜在问题:当用户返回空间时会怎么样?还是粘贴?@Keith Stein说得好,谢谢。您将如何解决这个问题?我的第一个想法是处理
TextChanged
事件。将新文本与旧文本进行比较,以确定到底发生了什么变化。
string word = null;
string fullText = new TextRange(MainTextBox.Document.ContentStart, MainTextBox.Document.ContentEnd).Text;
int startIndexOfWord = fullText.TrimEnd().LastIndexOf(' ');
if (startIndexOfWord != -1)
{
word = fullText.Substring(startIndexOfWord + 1).TrimEnd();
}