Syncfusion SfRichTextBoxAdv - 复制WPF TextRange功能?

时间:2017-12-25 00:33:20

标签: c# wpf richtextbox syncfusion textrange

我试图让用户在SfRichTextBoxAdv中进行选择,并将这些选择(文本范围)保存到集合中。问题是我还希望文本范围在文本添加或删除之前更新其开始/结束位置。即:如果在文本范围之前添加文本并将其向前推,则开始/结束索引需要相应增加。

在常规WPF RichTextBox中,我可以使用TextRange执行此操作。 使用TextRange,我可以将所选文本保存为TextRange变量。然后,如果在TextRange之前添加了一些文本并在文档中将其向前推,则开始和结束TextPointer属性会相应地更改。

使用SfRichTextBoxAdv,当我将所选文本保存为SelectionAdv变量时,每次光标在文档中移动到当前光标位置(当前选择)时,变量都会更新。所以我甚至不能将选择存储在一个变量中,因为它会随着光标在文档中的移动而一直变化。我尝试使用两个TextPosition变量存储选择:

var start = richTextBoxAdv.Selection.Start;
var end = richTextBoxAdv.Selection.End;

但是当光标像SelectionAdv一样移动时,它们仍会自动更新。

1 个答案:

答案 0 :(得分:0)

感谢您使用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

此致 卡特桑。