这还不怎么RichTextBox
的行为,如果我只是把这个到Kaxaml:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<RichTextBox/>
</Grid>
</Page>
这使我怀疑还有别的东西与你的代码怎么回事。它是什么?
编辑:
好吧,好吧,很明显,为什么你在插入符前面得到的“空间”:你申请一个样式,设置保证金的段落。 全部不清楚是什么按下BACKSPACE使它消失。
如何解决这样一个问题:一个事件处理程序添加到您的RichTextBox
(我用KeyUp
),并使用XamlWriter
其Document
财产转储到Console.Out
。你会看到的第一个填充时,该Document
包含:
<FlowDocument PagePadding="5,0,5,0" AllowDrop="True" NumberSubstitution.CultureSource="User" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Paragraph />
</FlowDocument>
你打空格键后,它看起来像这样:
<FlowDocument PagePadding="5,0,5,0" AllowDrop="True" NumberSubstitution.CultureSource="User" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Paragraph Margin="0,5,5,5" />
</FlowDocument>
这是一个很大更加明显发生了什么事情,如果你设置的您的风格中的边距为50而不是5.您在段落前看到的“空间”实际上是段落的左侧边距,由RTB资源字典中的样式设置。由于该段落没有本地Margin
属性,因此它将继承样式的边距。
当您按下BACKSPACE时,左边距被设置为0.这会给段落的边距属性一个本地值,因此它会停止从样式继承。
如果您按下ENTER并添加新段落,则新段落会复制上一段落的边距。所以,基本上,你的风格停止工作。
这似乎是RTB实施EditingCommands.Backspace
的一个错误。什么是命令的应该做的,正式:
当空选择调用,这个命令只是插入符之前删除字符或段落分隔符。当在非空选择上调用时,该命令将删除选择。
此命令在调用此命令后,保留从删除选择中为立即插入到相同位置的内容的任何格式。
我认为这很清楚,这不是它实际上在做什么。实际上,如果将边距设置为50,则可以清楚地看出,当插入符号位于段落开始时带有边距的位置,并且您按下“退格键”时,它会将该段落的左边距减少20.我看不到任何记录的理由为了那个行为。
那么,你能做些什么呢?这种情况取决于您为什么首先设置该保证金。从你原来的描述来看,这听起来像是你认为它是保证金,而不是BACKSPACE让它消失的事实,那就是错误。那么,这很容易修复;摆脱那种风格。
但是,如果因为某种原因需要这个保证金,我不知道该怎么告诉你。
如果您没有在新行上键入任何内容,它如何返回空格?空间来自哪里? – slugster 2010-02-28 00:38:30
这是我的问题。我不知道它是如何可能的。当它返回一个空间时,克拉就处于不能走的位置。 – Justin 2010-02-28 01:35:21
你是说它超出了RichTextBox的范围吗?克拉在哪里?你能显示一个截图吗? – 2010-02-28 02:51:07