我尝试让用户在SfRichTextBoxAdv中进行选择,并将这些选择(文本范围)保存到一个集合中。问题是,当在文本范围之前添加或删除文本时,我还希望文本范围更新它们的起始/结束位置。即:如果在文本范围之前添加文本并将其向前推,则需要相应地递增开始/结束索引。
在常规的WPF RichTextBox中,我可以使用TextRange做到这一点。使用TextRange,我可以将所选文本保存为TextRange变量。然后,如果在TextRange之前添加了一些文本,并在文档中将其向前推,则开始和结束TextPointer属性会相应地更改。
使用SfRichTextBoxAdv时,当我将所选文本保存为SelectionAdv变量时,每次光标在文档中移动到当前光标位置(当前选择)时,该变量都会更新。所以我甚至不能将选择内容存储在一个变量中,因为它会随着光标在文档中的移动而随时发生变化。我尝试使用两个TextPosition变量存储选择:
var start = richTextBoxAdv.Selection.Start;
var end = richTextBoxAdv.Selection.End;但它们仍然会在光标移动时自动更新,就像SelectionAdv一样。
发布于 2017-12-27 12:21:29
感谢您使用Syncfusion产品。
在SfRichTextBoxAdv控件中,“SelectionAdv”的“Start”和“End”属性表示当前光标的位置。因此,只要移动光标,它就会自动更新。但是,您可以使用‘TextPosition’类的‘GetHierarchicalIndex’属性存储当前文本位置,该属性将返回一个字符串。稍后,您可以通过使用‘DocumentAdv’类的‘GetTextPosition(String HierarchicalIndex)’方法,使用存储的分层索引来检索文本位置。请从下面的链接参考我们的类参考文档。
http://help.syncfusion.com/cr/cref_files/wpf/sfrichtextboxadv/Syncfusion.SfRichTextBoxAdv.WPF~Syncfusion.Windows.Controls.RichTextBoxAdv.SelectionAdv~Start.html http://help.syncfusion.com/cr/cref_files/wpf/sfrichtextboxadv/Syncfusion.SfRichTextBoxAdv.WPF~Syncfusion.Windows.Controls.RichTextBoxAdv.SelectionAdv~End.html http://help.syncfusion.com/cr/cref_files/wpf/sfrichtextboxadv/Syncfusion.SfRichTextBoxAdv.WPF~Syncfusion.Windows.Controls.RichTextBoxAdv.TextPosition~GetHierarchicalIndex.html http://help.syncfusion.com/cr/cref_files/wpf/sfrichtextboxadv/Syncfusion.SfRichTextBoxAdv.WPF~Syncfusion.Windows.Controls.RichTextBoxAdv.DocumentAdv~GetTextPosition(String).html
我们准备了一个简单的示例来演示如何在按钮单击中保留选择,以及从分层索引中获取文本位置的方法。
示例代码(C#):
List<SelectionRangeExt> selectionRanges = new List<SelectionRangeExt>();
private void Button_Click(object sender, RoutedEventArgs e)
{
SelectionRangeExt range = new SelectionRangeExt();
range.Start = richTextBoxAdv.Selection.Start.GetHierarchicalIndex;
range.End = richTextBoxAdv.Selection.End.GetHierarchicalIndex;
selectionRanges.Add(range);
}
public TextPosition GetTextPoistion(string hierarchicalIndex)
{
if (hierarchicalIndex == null)
return null;
return richTextBoxAdv.Document.GetTextPosition(hierarchicalIndex);
} 示例链接:Sample.zip.
文本位置的层次索引为静态值,在文本位置之前添加或修改文本时,该索引不会更新。
如有更多疑问,请通过以下链接联系我们的支持人员:https://www.syncfusion.com/support/directtrac
你好啊,文卡特桑。
https://stackoverflow.com/questions/47964899
复制相似问题