您的位置:首页 > 其它

DX(DevExpress)RichEditControl 控件 生成导航栏,点击定位到文本

2017-11-18 12:02 711 查看

DX(DevExpress)RichEditControl 控件 生成导航栏,点击定位到文本

核心代码:

private void CreateNavigator()
{
if (m_Doc == null) return;
var Paragraphs = m_Doc.Paragraphs;

var DicLevelAndLastNode = new Dictionary<int, TreeCustomItem>();

var lstTree = new ObservableCollectionCore<TreeCustomItem>();
var RootNode = new TreeCustomItem
{
Header = "导航栏",
Parent = null,
IsExpand = true,
Tag = m_Doc.DocumentProperties.Title
};
DicLevelAndLastNode.Add(0, RootNode);

foreach (var pg in Paragraphs)
{
var Text = m_Doc.GetText(pg.Range);
var Level = pg.OutlineLevel;
if (Level < 1)
continue;

if (!DicLevelAndLastNode.ContainsKey(Level - 1))
{
ControlUtility.ShowWarningMsgbox($"本文档大纲级别存在跳级错误,如一级大纲下为三级、四级大纲,无法生成导航栏,建议检查文档");
return;
}

var ParentNode = DicLevelAndLastNode[Level - 1];
var Node = new TreeCustomItem
{
Tag = pg,
Header = Text,
//IsExpand = true,
Parent = ParentNode
};
ParentNode.Childrens.Add(Node);

if (!DicLevelAndLastNode.ContainsKey(Level))
DicLevelAndLastNode.Add(Level, Node);
else
DicLevelAndLastNode[Level] = Node;
}
lstTree.Add(RootNode);
treeNav.SelectedItemChanged += new SelectedItemChangedEvent(ucTreeView_SelectedItemChanged);
treeNav.ContextMenuOpening += new ContextMenuEventHandler(ucTreeView_CreateContextMenu);
treeNav.BuildHierarchicalDataTemplate(typeof(TreeCustomItem), "Childrens", "Header", null, "Header");
treeNav.BindingTreeViewData(lstTree);
}


其中,最主要的是要自己生成一个Tree的实体类,要求有Parent、Children、Tag属性,然后可以绑定在TreeView中。读取Doc文本的时候,按照段落读取,每一段有一个大纲级别,然后把大纲级别>=1的加进左侧的TreeView中。(0级为正文文本)
最后是点击事件,导航:


if (selectedItem == null) return;
var Node = selectedItem as TreeCustomItem;
if (Node == null) return;
var pg = Node.Tag as Paragraph;
if (pg == null) return;
rbxDoc.Document.CaretPosition = pg.Range.Start;
//rbxDoc.ScrollToCaret();
rbxDoc.ScrollToCaret(0);


获得当前节点的Tag,即对于的段落实体。然后设置CaretPosition为段落的起始位置。rbxDoc.ScrollToCaret()这个函数,有时候会定位到最上方,有时候会定位到最下方,十分不方便。他的重载里有一个带参数的形式。




字面意思上理解就是滚动到光标时,显示在第几行。传入参数0,就是在最上方,完美解决了定位有时候在文档上方,有时候在文档下方的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐