文本在RichTextBox中按下Enter时消失

时间:2017-07-25 08:25:09

标签: c# wpf richtextbox flowdocument

我有一个RichTextBox。在框中我使用了FlowDocument并运行如下,

<RichTextBox  Margin="0"  Height="75" Width="300" VerticalContentAlignment="Top" 
      HorizontalAlignment="Stretch" VerticalAlignment="Center">
   <FlowDocument>
       <Paragraph>
          <Run x:Name="remarksText" Text="{Binding BookName,
                UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
       </Paragraph>
   </FlowDocument>
</RichTextBox>

最初我在BookName属性中设置了一些值。它显示正确。当我尝试在运行时编辑它时,在聚焦光标后我按下了输入按钮,在这种情况下,现有值消失了。有谁知道这个问题的原因是什么。

这是与RichTextBox还是FlowDocument相关的问题或行为?

谢谢,

夏普

1 个答案:

答案 0 :(得分:0)

相同的问题,我已经找到了解决方法,假设您的xaml是:

<RichTextBox x:Name = RTB PreviewKeyDown = "RTB_PreviewKeyDown">
    <FlowDocument>
        <Paragraph>
            <Run Text = "{Binding SomeProperty,Mode = TwoWay}"/>
        </Paragraph>
    </FlowDocument>
</RichTextBox>

在cs代码中,实现RTB_PreviewKeyDown和InsertText方法:

private void RTB_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {                
        InsertText(RTB, "\r\n");
        e.Handled = true;
    }
}

public static void InsertText(RichTextBox rtb, string content)
{
    if (!string.IsNullOrEmpty(content))
    {
        rtb?.BeginChange();
        if (!string.IsNullOrEmpty(rtb.Selection.Text))
        {
            rtb.Selection.Text = string.Empty;
        }
        var tp = rtb.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward);
        rtb.CaretPosition.InsertTextInRun(content);
        rtb.CaretPosition = tp;
        rtb.EndChange();
        Keyboard.Focus(rtb);
    }
}

希望此解决方案有效。