【问题标题】:Undo (ctrl +z) not working in richtextbox with formated text. WPF C#撤消 (ctrl +z) 在带有格式化文本的富文本框中不起作用。 WPF C#
【发布时间】:2018-04-20 20:50:49
【问题描述】:

我正在使用一个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;
    }

在我尝试执行 Undo (ctrl + z) 操作之前一切正常。

问题场景:

在richTextBox 中输入STATUS : PASS。文本颜色将变为绿色(一切正常)。

按 Backspace 删除最后一个 S(状态:PAS)。文本颜色变为黑色(工作正常)。

现在按 Ctrl + z 来取回 S。这里什么都没有发生。

为什么撤消在这里不起作用?有没有更好的方法来格式化文本以便 Undo Redo 操作可以正常工作?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您应该打开 ShortCutsEnabled 属性

    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
         }
    }
    

    【讨论】:

      【解决方案2】:

      您使用 SelectionChanged 事件而不是 TextChanged 事件是否有原因?我有一个类似的应用程序,使用 CTRL + Z 行为正确的 TextChangedEvent。请注意,更改格式会被视为使用 RichTextBox 的 TextChanged 事件,因此您必须在进行样式设置然后重新挂钩之前取消挂钩事件。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-03
        • 2017-02-09
        • 2013-03-24
        • 2015-11-25
        • 2018-09-25
        相关资源
        最近更新 更多