2010-02-28 82 views
4

当我第一次运行我的程序并在richtextbox中键入一些文本时,如果按Enter键,导致克拉移动到新行,然后按退格键而不是转到上一行,它只是即使我没有在这一新行上键入任何文本,也会移回一个空格。我无法弄清楚发生了什么事。我究竟做错了什么?我该如何解决它?RichTextBox无法正常工作

编辑:

它看起来像richtextbox是添加的第一个字符前面的空间,当我开始打字和空间在每一个新行我让前面加。我不能将克拉放在空间前面,点击它前面,但我可以使用退格键删除它,然后一切恢复正常。

编辑2:这是一个似乎是导致问题的代码,但我无法弄清楚它为什么这样做:

<RichTextBox.Resources> 
    <Style TargetType="{x:Type Paragraph}"> 
      <Setter Property="Margin" Value="5"/> 
    </Style> 
</RichTextBox.Resources> 
+1

如果您没有在新行上键入任何内容,它如何返回空格?空间来自哪里? – slugster 2010-02-28 00:38:30

+0

这是我的问题。我不知道它是如何可能的。当它返回一个空间时,克拉就处于不能走的位置。 – Justin 2010-02-28 01:35:21

+0

你是说它超出了RichTextBox的范围吗?克拉在哪里?你能显示一个截图吗? – 2010-02-28 02:51:07

回答

4

这还不怎么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),并使用XamlWriterDocument财产转储到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让它消失的事实,那就是错误。那么,这很容易修复;摆脱那种风格。

但是,如果因为某种原因需要这个保证金,我不知道该怎么告诉你。

+0

我发现了违规代码,并将其作为对我的问题的修改发布。尽管我已经找到问题所在,但我仍然无法弄清楚它为什么会发生。 – Justin 2010-03-05 07:13:29

+0

非常感谢! – Justin 2010-03-08 20:48:38