Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以编辑richtextbox中的单个单词吗?_C#_Wpf_Formatting_Richtextbox - Fatal编程技术网

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();
}