![]() |
1
3
给你几个主意 想法1:完全在后台线程上提取字体。 字体实际上被加载到系统字体缓存(进程间)中,然后部分字体信息被复制到线程特定的字体缓存中。填充系统字体缓存可能会导致足够快的速度增加。这可以通过一个低优先级的后台线程来完成,该线程在应用程序启动后立即开始运行。因此,当用户下拉字体列表时,系统字体缓存应该被完全填充。 想法2:自己缓存渲染的字体几何图形 不要使用文本块,而是在ComboBox的数据模板中使用ContentPresenter对象,内容绑定到PriorityBinding。较低的优先级将使用默认字体生成一个文本块,较高的优先级将是一个isasync绑定,该绑定将使用适当的参数创建一个glyphRun,对其调用buildGeometry(),并返回路径对象内的几何体。创建的几何图形对象可以缓存并再次返回,以便将来访问同一字体。 这样做的结果是,项目最初将以默认字体显示,并在可以加载字体及其几何图形后立即呈现为样式化字体。注意,这可以与在单独线程中预先填充缓存的代码结合在一起。 想法2的代码如下所示:
其中,myfontobjets将是大量这样的对象:
请注意,通过将缓存中的几何图形对象转换为PathGeometry,然后再转换为PathGeometry Mini语言中的字符串,可以将其保存到磁盘。这将允许使用单个文件读取和分析来填充字体几何缓存,因此,您看到任何延迟的唯一时间是首次运行应用程序时,或使用大量新字体运行应用程序时。 |
![]() |
2
0
我的解决方案是不要提前渲染所有字体,通过使用字体列表的虚拟面板,您将只加载适合屏幕的字体,它将第一次减慢滚动速度,但用户几乎看不到。 看 http://www.bennedik.de/2007/10/wpf-fast-font-drop-down-list.html 顺便说一句,如果将组合与virtualizingstackpanel一起使用,则必须在datatemplate中设置textBlock元素的宽度,否则在滚动期间下拉列表的宽度将发生更改。 |
![]() |
toddmo · 当内容不可用时,如何优雅地后退 6 年前 |
![]() |
Ronald LaPlante · 在css中查找字体 6 年前 |
![]() |
bellotas · 如何将新字体导入项目-Angular 5 6 年前 |
![]() |
user7088941 · 无法在tkinter中更改按钮字体大小 6 年前 |
![]() |
sripberger · 向docker图像添加字体 7 年前 |
![]() |
newbeeep · Freetype2返回的大小值大于预期值 7 年前 |
![]() |
FormaL · wordpress请求404/410响应缺少字体 7 年前 |