撤消(ctrl + z)无法在带有格式化文本的richtextbox中工作。 WPF C#

时间:2018-04-20 11:00:03

标签: c# wpf

我正在使用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不能在这里工作?有没有更好的方法来格式化文本,以便撤消重做操作可以正常工作?

2 个答案:

答案 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事件,因此您必须在进行样式设置之前取消挂钩事件,然后重新挂起。

https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.textboxbase.textchanged(v=vs.110).aspx