gpt4 book ai didi

c# - 为什么在将新段落添加到文档 block 时运行的父级变为空?

转载 作者:行者123 更新时间:2023-11-30 17:56:40 24 4
gpt4 key购买 nike

我正在尝试为我的 RichTextBox 控件创建自定义撤消/重做管理器。我在一个Run中插入一个char,并将插入位置和Run等信息保存在Undo Stack中。

当我尝试撤消时,我删除了插入的 char。之后,我通过这行代码设置 CaretPosition:

CaretPosition = run.ContentStart.GetPositionAtOffset(position);

当我不开始一个新的 Paragraph 时,一切都很好。

当我按下 enter 并开始一个新段落并且我想撤消时,会发生一些奇怪的事情。让我再解释一下:

1- 我按下回车键,生成了一个新的段落
2- 我调用撤消
3- 到了上面的代码行,抛出了这个异常:Cannot set CaretPosition to be outside of RichTextBox.

我认为这是因为 run.Parent==null 而不是它的父段落(这次运行在第一段,我的意思是我按下返回的段落)。 当我将此运行保存到 Undo Stack 时,它的父级不为空。

我看到了 ContentElement.cs(Run 的基类)的源代码。是这样写的:

internal DependencyObject _parent;
internal DependencyObject Parent { get { return _parent; } }

_parent 属性如何在一些更改后变为 null?我如何防止这种情况发生?

更新
(假设我在第一段写“123”。)第一段存在于 Document.Blocks 中,并且其中包含“123”。但这是一个不同的运行。这是否意味着生成了新的运行?!我真的很困惑。

谢谢。

最佳答案

我很可能错了,但是当它是新的 paragrpah 时,请尝试删除最后 2 个字符。我认为您收到此错误是因为当您按回车键时它会插入两个字符:\r\n(回车符 + 换行符)

关于c# - 为什么在将新段落添加到文档 block 时运行的父级变为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com