CTRL+A 重置富文本框/流文档中的段落边距

Posted

技术标签:

【中文标题】CTRL+A 重置富文本框/流文档中的段落边距【英文标题】:CTRL+A resets Paragraph Margins in Rich Text Box/Flow Document 【发布时间】:2021-03-31 18:58:27 【问题描述】:
<RichTextBox x:Name="TextEntry">
    <FlowDocument>
        <Paragraph Margin="0,0,0,0"/>
    </FlowDocument>
</RichTextBox>

这是我当前 XAML 的基本布局。当我第一次启动我的应用程序时,它运行良好。但是,在按 CTRL+A 后,边距似乎重置了,并且按一下 Enter 似乎会在段落中添加两行。

有什么方法可以对付这种行为吗?或者我可能会错误地更改边距?

我尝试在 C# 中添加实现以覆盖 CTRL+A 的默认行为,并提前将事件注册为已处理,以防止在后台进行任何奇怪的操作,唉,这并没有让我到任何地方。

【问题讨论】:

只是一个猜测,但 Paragraph 不是您控件的内容,因此被您的输入更改了吗?如果您为父元素 (FlowDocument) 设置边距属性和/或减少 RitchTextBox 的填充,该怎么办? @svin83 段落在输入时不会改变,只有在按下 CTRL+A 时才会改变。有点奇怪。但遗憾的是 FlowDocument 没有 Margin 属性,并且 RTB 的边距不应该被摆弄以保持在它的高度/宽度内。 RTB 填充,而不是边距。 @svin83 很遗憾,没有。没有酱。我想知道按 Backspace 的 CTRL+A(然后不相关)是否最终会删除段落并将原始文本存储在 FlowDocument 中并创建一个新的样板段落。 【参考方案1】:

我发现了问题。

CTRL+A+BACKSPACE 正在删除 整个 段落对象,该对象是静态样式的。在新输入后,原始文本刚刚被放入一个全新的段落中。这是一个解决方案:

<RichTextBox>
    <RichTextBox.Resources>
        <Style TargetType="x:Type Paragraph">
            <Setter Property="Margin" Value="0"/>
        </Style>
    </RichTextBox.Resources>
    <FlowDocument>
        <Paragraph Margin="0,0,0,0"/>
    </FlowDocument>
</RichTextBox>

【讨论】:

以上是关于CTRL+A 重置富文本框/流文档中的段落边距的主要内容,如果未能解决你的问题,请参考以下文章

iOS富文本实现列表显示效果

iOS富文本文字的运用(用掉了洪荒之力)

我用百度富文本插入网络视频,插入后不能播放,如何解决?

iOS富文本实现(-):私密阅读效果

WORD文本框 文字间距

iOS富文本