C# 在RichTextBox中按enter键时,文本消失
我有一个RichTextBox。在这个盒子里,我使用了FlowDocument,并按如下方式运行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 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);
}
}