有没有了解WPF的大佬,求推荐一款开源编辑器控件

数码科技
2021-10-11 03:44:32
9
290
此间风物

在做一个码字软件,一开始采用的方案是TextBox控件,限制最大字数20000个,本身编辑没问题,但Ctrl+A全选,还有实时统计,明显有些卡顿,四五千字的时候就会有明显的体感了,一万多字以上更是非常糟糕,可能需要采用多线程或者其他办法来做,会变得复杂。

(如果去掉实时统计,倒是流畅,但实时统计又是比较重要的功能,不想砍掉)

后来查资料选择了AvalonEditor,感觉差强人意,流畅很多了,但还是有些不足之处,比方说它本身是为写代码设计的,很多细节不大满意。空行也会统计成段落,段落数目就有些不好统计了,我的水平又还不足以修改它的源代码然后编译过来自己用。

不知道有没有其他开源项目可以参考。

回复
评分
收藏
举报
此间风物

如题,基本上都是为了寻求写作软件的章节编辑功能的解决方案

目前综合考量,还是倾向于AvalonEdit,但如果有更适合中文编辑而非写代码的,请强烈推荐!

回复
评分
收藏
举报
乾初九

好像得运用一些数据结构的知识,你去看看piece table 相关内容,找找灵感吧。

这种具体的问题,换个开发环境,可能还会遇到。

回复
评分
收藏
举报
此间风物
@乾初九好像得运用一些数据结构的知识,你去看看piece table 相关内容,找找灵感吧。

这跟数据结构关联不大吧,主要还是原生控件跟线程的问题

wpf这个用户界面框架是用一个UI线程单独渲染控件界面的,所有UI的操作必须在UI线程上进行,无法在子线程中进行(其实可以使用委托,但,它本身就不少局限,改来改去也就那样)。

使用Avalon控件的话,它可能采用了单独的线程(具体是不是这样我也不清楚,没细究)

而一些记事本,是只更新当前显示区域

其实现成的开源控件AvalonEdit还蛮好用的,编辑两百多万字都还能比较流畅的实时统计字数(汉字,数字,可见字符等等),就是它的一切特性都是为了写代码设计的,不知道有没有更适合中文编辑的。

回复
评分
收藏
举报
乾初九
@此间风物这跟数据结构关联不大吧,主要还是原生控件跟线程的问题

这个数据结构大概就是,将textbox中的内容保存(比如change事件这种即时保存)为两份,一份用来正常读写,一份只读,只读文件随着保存随时更新,那么字数统计时可以读取只读文件中的内容,不在textbox框里读取数据。这种方式就是文本编辑器常用的数据结构呀。

回复
评分
收藏
举报
此间风物
@乾初九这个数据结构大概就是,将textbox中的内容保存(比如change事件这种即时保存)为两份,一份用来正常读写,一份只读,只读文件随着保存随时更新,那么字数统计时可以读取只读文件中的内容,不在textbox框里读取数据。这种方式就是文本编辑器常用的数据结构呀。

如果采用原生控件TextBox的话,不加任何代码,只是往里面放足够长的长字符串,连Ctrl+A这样一个动作,都是卡的。

感觉这主要还是渲染UI那一步出现问题,好比我说的Ctrl+A,因为涉及到在UI上面渲染出选择区域变色这么一步,它居然是从头到尾都囊括进去,而不是只渲染可见区域,这玩意儿本身就不是为大文档设计的

而且,TextBox控件本身就不是那样的数据结构,它是直接用字符串数组的(话说回来,搜索看了看,连vc code一开始都是用类似的方法来处理的呀,一直到2018年才开始采用piece table)

框架本身就决定了它的数据结构如果我要从头开始设计,那就是另外一个自定义控件了,也没有必要

我当前的选择是采用开源项目AvalonEdit,性能方面是满意的,希望看看还有没有更合适中文编辑的(我自己也在搜索着),毕竟开始选择就会积重难返了,硬着头皮用下去,实在不行只能自己改造AvalonEdit了,但那样一来又还得啃文档,还真不如一开始就选择对的,开箱即用

回复
评分
收藏
举报
乾初九
@此间风物如果采用原生控件TextBox的话,不加任何代码,只是往里面放足够长的长字符串,连Ctrl+A这样一个动作,都是卡的。

我试了一下,wpf的文本框确实卡呀23333333333333

winform的就不卡,要不舍弃美观,用winform吧。

回复
评分
收藏
举报
此间风物
@乾初九我试了一下,wpf的文本框确实卡呀23333333333333

emmmmm……中途调不了头啦,只能wpf写下去,已经消耗了时间精力的东西,不能再增加成本了

而且各方面考虑还是wpf比winform好呀,开源项目可以解决不少问题

其实我的梦想是:砸钱,用钞能力搞出来!money可比这些好用多了,无奈啊无奈

回复
评分
收藏
举报
猪湾古巴旅

与其说统计说段落,不如说是统计行数

看看这个控件怎么统计行数的,然后自己写个类似的方法,再把空行过滤掉就行了

回复
评分
收藏
举报
此间风物
@猪湾古巴旅与其说统计说段落,不如说是统计行数

我自己写的控件,自己的方法能过滤空行。

然而我是要在那个控件上面用,主要还是改造起来也麻烦,如果直接有满意的就不用折腾了。

回复
评分
收藏
举报

本帖需登录才可回复,没有帐号欢迎立即注册