c# - Syncfusion SfRichTextBoxAdv - 复制 WPF TextRange 功能?

标签 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 一样移动时,它们仍然会自行更新。

最佳答案

感谢您使用 Syncfusion 产品。

在SfRichTextBoxAdv控件中,‘SelectionAdv’的‘Start’和‘End’属性表示当前光标位置。因此,只要光标移动,它就会自动更新。但是,您可以使用“TextPosition”类的“GetHierarchicalIndex”属性存储当前文本位置,这将返回一个字符串。稍后您可以使用“DocumentAdv”类的“GetTextPosition(string hierarchicalIndex)”方法使用存储的层次索引检索文本位置。请从以下链接引用我们的类(class)引用文档。

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

问候, 文卡特桑。

关于c# - Syncfusion SfRichTextBoxAdv - 复制 WPF TextRange 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47964899/

相关文章:

c# - 具有 null 属性的嵌套属性的动态 linq 排序

c# - 在 StackPanel 中设置项目间距的简单方法是什么?

c# - 在 WPF RichTextBox 中将特定文本设置为粗体

c# - 从字体样式中减去标志(切换字体样式)[C#]

c# - .NET 程序集的签名

c# - 如何制作字符串“,”?

代码中的 WPF 绑定(bind)

c# - 在 WPF 中使用 EntityFrameWork 加载数据时显示进度条

WPF DataGridComboBoxColumn 的 ComboBox 仅在 DataGrid 具有 IsReadOnly=FALSE 时可见

c# - RichTextBox(如何编辑类似记事本的格式?)