问题描述
我为此进行了几次尝试,但到目前为止没有任何效果。
这是普通TextBox的功能(这就像一种魅力,但是我需要做一些格式化工作,所以我也需要它才能用于RichTextBox):
//this works:
//Save the actual CaretIndex for later
safeActualCaretPositionInTextBox = txtFormulaString.CaretIndex;
//Insert the (user-)chosen text by another control
txtFormulaString.Text = txtFormulaString.Text.Insert(txtFormulaString.CaretIndex,function.PlainFunction);
//set focus back to TextBox
txtFormulaString.Focus();
//set CaretIndex at needed position (as I insert some formula (i. e. COS()) I need the CaretIndex n position(s) to the left)
txtFormulaString.CaretIndex = safeActualCaretPositionInTextBox + function.PlainFunction.Length;
txtFormulaString.CaretIndex -= function.CaretOffset;
txtFormulaString.SelectionLength = 0;
我已经尝试过这个(RichTextBox.CaretPosition Property
),目前拥有这个功能:
safeActualCaretPositionInRichTextBox = rtbFormulaString.CaretPosition.GetInsertionPosition(LogicalDirection.Forward);
rtbFormulaString.CaretPosition.GetInsertionPosition(LogicalDirection.Forward).InsertTextInRun(function.PlainFunction);
rtbFormulaString.CaretPosition.GetPositionAtOffset(-function.CaretOffset);
rtbFormulaString.Focus();
rtbFormulaString.CaretPosition = safeActualCaretPositionInRichTextBox;
插入似乎有效,但是我无法将插入符号设置在正确的位置。它始终始于文本的开头。 我做错了什么或我想念什么?
编辑: 当我在项目中使用MVVM时,我在ViewModel中有一个属性,该属性需要在每次更改文本后进行更新(使用了RichTextBox_TextChanged事件):
vm.FormulaString = new TextRange(rtbFormulaString.Document.ContentStart,rtbFormulaString.Document.ContentEnd).Text;
当我删除此行时,它有时会起作用(我不知道为什么或怎么做,我也不知道为什么它会那样运行)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)