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,就是在最上方,完美解决了定位有时候在文档上方,有时候在文档下方的问题。
相关文章推荐
- 选中Tab控件单击事件,点击tab头,定位到导航栏的选项,为选中状态 ,DevExpress.XtraNavBar.NavBarControl 导航控件定位或选中状态 另导航的选项为选中状态.
- DevExpress控件-RichEditControl文本高亮显示(图文)
- DX,DevExpress中的RichEditControl如何替换选中的文字
- DevExpress控件使用之RichEditControl的使用
- DevExpress控件使用之RichEditControl的使用
- DevExpress控件使用之RichEditControl的使用
- DevExpress控件使用之RichEditControl的使用
- Devexpress GridView内嵌dx:ASPxGridLookup取得控件值乱跳解决方案
- ListView使用自定义适配器的情况下实现适配器的文本和图标控件点击事件执行Activity界面中的方法
- struts2配置i18n设置,点击链接生成国际化文本
- 在编辑页面布局,点击其中的一个控件时,不自动定位到页面的代码
- DevExpress RichEditControl 上下翻页功能 z
- 关于DevExpress.XtraTreeList.TreeList控件的使用——给TreeList添加RepositoryItem以实现文本编辑功能
- 动态生成控件并定位
- 点击按钮,生成一组一组combobox和slider时,避免控件Id相同,导致控件冲突的方法
- Android 动态生成多个控件并实现点击
- DevExpress的控件GridControl光标定位到某一个单元格
- JavaScript实现点击文本自动定位到下拉框选中操作
- 纠结了一晚上的问题---点击导航栏的一个文本链接后所有导航栏文本链接颜色都变成访问过的颜色了
- 详解DevExpress.LookUpEdit控件实现自动搜索定位功能