合并 RichEditBox 和 TextBox 的撤消层次结构



我有一个RichEditBox和一个TextBox。我想要实现的是"组合"两个控件的撤消历史记录,就好像它们是一个文本框一样。当用户在这两个元素之一中执行撤消时,它实际上应该发生在控件中,其中包含要撤消的最新事件。

例如,当我在文本框 A 中键入一些文本,然后在文本框 B 中键入一些文本,然后在两个元素之一中执行撤消之前,我希望删除 B 中的输入。

我已经考虑过TextChanged事件来构建我自己的撤消队列,但我看不到像RichEditBox那样对输入的字符进行分组的可能性。在我看来,逐个字符撤消并不是令人满意的用户体验。

有谁知道这个问题的简单解决方案或解决方法?

基于RichEditBox的文档,它提到RichEditBox的内容是一个Windows.UI.Text.ITextDocument对象,这个ITextDocument接口提供了一种撤消和重做更改等的方法。因此,如果要在文本框中执行撤消时删除 RichEditBox 中的文本,则可以使用 ITextDocument 接口调用 Undo 方法。例如,我订阅了文本框的PreviewKeyDown事件,当按后退键在文本框中执行撤消时,删除 RichEditBox 中的文本或先删除文本框中的文本。

.xaml:

<StackPanel>
<RichEditBox x:Name="MyRichBox"></RichEditBox>
<TextBox x:Name="MyTextBox" PreviewKeyDown="MyTextBox_PreviewKeyDown"></TextBox>
</StackPanel>

。.cs:

private void MyTextBox_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Back) 
{
//delete
if (MyTextBox.Text == "") 
{
MyRichBox.Document.Undo();
}
}
}

最新更新