我正在使用richTextBox,它将根据文本更改线条(段落)颜色。这是我的示例代码。
private void RTB_Main_SelectionChanged(object sender, RoutedEventArgs e)
{
Paragraph para = RTB_Main.CaretPosition.Paragraph;
TextRange TR = new TextRange(para.ContentStart, para.ContentEnd);
para.Foreground = TR.Text == "STATUS : PASS" ? Brushes.Green : TR.Text == "STATUS : FAIL" ? Brushes.Red : Brushes.Black;
}
一切正常,直到我尝试执行撤消( ctrl + z )操作。
问题场景:
在richTextBox中键入 STATUS:PASS 。文字颜色将变为绿色(一切都很好)。
按 Backspace 删除最后 S (状态:PAS)。文字颜色变为黑色(工作正常)。
现在按 Ctrl + z 返回 S 。这里什么都没发生。
为什么Undo不能在这里工作?有没有更好的方法来格式化文本,以便撤消重做操作可以正常工作?
答案 0 :(得分:3)
您应该将ShortCutsEnabled属性设置为ON
RTB_Main.KeyDown += new KeyEventHandler(RTB_Main_KeyDown);
void RTB_Main_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Z && e.Control) {
//Undo users last update somehow
}
}
答案 1 :(得分:1)
您是否有理由使用SelectionChanged事件而不是TextChanged事件?我有一个类似的应用程序,使用TextChangedEvent CTRL + Z 正常运行。请注意,将格式设置更改为具有RichTextBox的TextChanged事件,因此您必须在进行样式设置之前取消挂钩事件,然后重新挂起。