我有一个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相关的问题或行为?
谢谢,
夏普
答案 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);
}
}
希望此解决方案有效。