我有一个 RichEditBox
和a TextBox
. 我想实现的是 "结合 "两个控件的撤销历史,就像它们是一个文本框一样。当用户在两个元素中的一个元素中执行撤消操作时,实际上应该发生在最近要撤消的事件的控件中。
例如,当我在文本框A中输入一些文本,然后在文本框B中输入一些文本,然后在两个元素中的一个元素中执行撤消操作,我希望B中的输入被删除。
我想过用 TextChanged
事件来建立我自己的撤消队列,但我没有看到像在这里一样对输入的字符进行分组的可能性。RichEditBox
. 一个字符一个字符的撤销,在我看来,用户体验并不理想。
有谁知道这个问题的简单解决方案或变通方法吗?
基于 文件 的,它提到RichEditBox的内容是一个 Windows.UI.Text.ITextDocument
对象,而这个ITextDocument接口提供了撤销和重做修改等方法。所以,如果要删除RichEditBox中的文本,当在TextBox中执行撤销操作时,可以使用ITextDocument接口来调用Undo方法。例如,我订阅了 预览键下 TextBox的事件,当按Back键在TextBox中执行撤销操作时,先删除RichEditBox中的文本或删除TextBox中的文本。
.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();
}
}
}