我有一个希伯来日历应用程序,其中每一天都是一个用户控件。我在该控件中有 6 个标签,分别用于英语日期、希伯来语日期、犹太节日和其他一些用户定义的数据。滚动时,标签的内容会随着 UserControl 的日期值一周上升或下降而变化。滚动速度明显慢于 Microsoft Outlook 日历,并且分析显示花费时间最长的部分是更新标签内容,这不是由我的代码处理的。
有什么办法可以让这一切变得更快吗?MS Outlook 似乎有相当数量的文本字段,并且滚动流畅。
我有一个希伯来日历应用程序,其中每一天都是一个用户控件。我在该控件中有 6 个标签,分别用于英语日期、希伯来语日期、犹太节日和其他一些用户定义的数据。滚动时,标签的内容会随着 UserControl 的日期值一周上升或下降而变化。滚动速度明显慢于 Microsoft Outlook 日历,并且分析显示花费时间最长的部分是更新标签内容,这不是由我的代码处理的。
有什么办法可以让这一切变得更快吗?MS Outlook 似乎有相当数量的文本字段,并且滚动流畅。
TextBlocks
没有明显快于Labels
,但Glyphs
给了我的日历鞭打。
更换这个
<TextBlock Padding="5"
FontFamily="Narkisim"
FontWeight="Bold"
FontSize="20"
Text="{Binding HebrewDate}"/>
有了这个
<Glyphs Name="HebrewDate"
Margin="5"
StyleSimulations="BoldSimulation"
FontUri = "/Fonts/nrkis.ttf"
FontRenderingEmSize = "20"
UnicodeString = "5771 ןושח ה"
Fill = "Black"/>
使滚动超级快。
一些注意事项:
Glyphs
不支持绑定,所以我不得不给每个人一个名字并在后面的代码中更新它们,如下所示:
HebrewDate.UnicodeString = zman.HebrewDate;
Glyphs
没有布局功能,所以希伯来语文本倒退了。我不得不使用反转函数对希伯来语字符串进行预处理。即使在反转之后,希伯来元音点也没有对齐,所以我保留Labels
了那些使用元音的字符串。
我不能确定,但 MS Outlook 的编码可能比 WPF 更快,也许是使用 DirectX 来快速显示图形。
否则,我可能会建议减少一次更新的绑定数量,我建议使用额外的线程在有空闲周期时逐渐更新标签,而不是一次全部更新,这可能会导致您的口吃。
为了配合前面的答案,我推荐后台工作人员。利用后台工作程序执行滚动期间执行的最耗时的操作。
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx