Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在RichTextBox中按enter键时,文本消失_C#_Wpf_Richtextbox_Flowdocument - Fatal编程技术网

C# 在RichTextBox中按enter键时,文本消失

C# 在RichTextBox中按enter键时,文本消失,c#,wpf,richtextbox,flowdocument,C#,Wpf,Richtextbox,Flowdocument,我有一个RichTextBox。在这个盒子里,我使用了FlowDocument,并按如下方式运行 <RichTextBox Margin="0" Height="75" Width="300" VerticalContentAlignment="Top" HorizontalAlignment="Stretch" VerticalAlignment="Center"> <FlowDocument> <Paragraph>

我有一个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属性中设置了一些值。它显示正确。当我试图在运行时编辑它时,在聚焦光标后,我按下了enter按钮,现有值消失了。有人知道这个问题的原因吗

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

谢谢


夏普

同样的问题,我找到了一个解决方案,假设您的xaml是:

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

希望此解决方案有效。

可能它没有消失,但您已移动到新行,上一个文本已上移?你以前检查过吗?是的,我也检查过了,但是它只显示了空框,只有光标已经移动到下一行。当你在运行中按下你的选择时,编辑器会在它的另一个段落中运行。类似于
我假设在这个操作过程中发生的文本操作不知道如何处理绑定,所以它是空的。我不知道解决办法是什么。
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);
    }
}