我是WPF的新手,遇到了一个问题。
我有一个富文本框,我设置了它的文本。然后,每当富文本框文本发生更改(使用事件处理程序)时,我需要检查它是否等于原始文本。
但是,即使文本没有改变,代码也说它是由于在阅读文本时出现了一条新行。
这基本上就是我在做的事情:(显示问题的简化版本)
//Create a new text box
RichTextBox r = new RichTextBox();
//Write Text "Hello World" to the rich text box
r.Document.Blocks.Clear();
r.Document.Blocks.Add(new Paragraph(new Run("Hello World")));
//Read Text "Hello World" from rich text box
string textBoxText = new TextRange(r.Document.ContentStart, r.Document.ContentEnd).Text;
Console.WriteLine("\"" + textBoxText + "\"");
我希望看到" Hello World"在控制台中,但它给出了:
"Hello World
"
因为在此之后有一个新行,它会导致我的代码出现问题。 是否有更好的方法来读写RichTextBox以避免这种情况?
答案 0 :(得分:0)
我决定在WPF窗口中使用Windows窗体RichTextBox而不是标准的WPF RichTextBox。
使用xaml有点棘手,所以我主要在代码隐藏窗口打开窗口时设置它的属性。
到目前为止,它解决了我所有的问题。
更多信息:
https://msdn.microsoft.com/en-us/library/ms751761(v=vs.110).aspx
https://www.simple-talk.com/dotnet/.net-framework/mixing-wpf-and-winforms/
(我不会将此标记为答案,因为如果您想使用WPF RichTextBox而不是WinForms,它不能解决问题)
编辑:实际上,最好避免使用此方法,因为WinForms控件是在所有WPF控件之上绘制的。这使我无法使用wpf中的下拉菜单。 ......还在寻找答案!!!
编辑:
我尝试使用this answer在winforms RichTextBox上方绘制我的wpf下拉菜单。它奏效了,但是调整出错了。
现在,我放弃了WPF和WinForms RichTextBox并且已经使用了AvalonEdit(这太棒了)。它最初是为代码编辑器制作的,但适用于任何类型的RichTextBox替换。