1

我目前正在为 WP7 制作阅读应用程序。为了让它有点原创,我决定将文本包装在全景控件中,以模仿拇指的“翻页”运动。

我创建了几种方法来在全景图的每个面板中放置足够但不太多的文本,并在必要时创建更多面板。主要方法是这样的(口头形式):

split the string on spaces, giving a string array containing words.

foreach(word)
    add word in the textBlock of the current "page"
    if the textBlock's height is over the maximum height allowed
        remove the word
        create a new page (aka new panoram item with a new textBlock)
        make this new page the current one
        add the word in the new textBlock
    endif
endforeach

您可以猜到,这种方法非常耗时。它在加载ApplicationPage 时调用,根据字符串的长度使其非常长。

我尝试了几件事,比如在加载时生成两个第一页,然后在用户平移以阅读下一页时生成,但即使使用此解决方案,平移转换在方法调用期间也会滞后。

我曾想过 BackgroundWorker 类来完成这项工作,但不幸的是我看到它无法访问 UI 本身,即使可以,我也担心它会阻塞 UI 线程或至少使它滞后。

我“喜欢”这种方法,因为它独立于字体大小或使用字体的事件来格式化文本,这与我之前的测试不同,我之前在每页使用固定数量的字符(比如最多 700 个字符,但 700 个“i”没有'不要使高度和宽度与 700 "m" 相同)。

所以也许你有这个问题的其他解决方案。我并不是专门要求在我的项目中复制和粘贴一段代码。因为我实际上是通过这个项目学习 C#,所以我的目标是完全自己编写代码。

感谢您阅读它,并对潜在的语法或词汇错误深表歉意,因为英语不是我的母语。

友谊赛,

4

1 回答 1

0

您可以通过 Dispatcher.BeginInvoke 调用来更改 UI。

除了进度报告以及后台工作人员完全完成后,我认为您无能为力。

控件是在 UI 线程上创建的,因此只能从那里或通过我提到的机制访问。

于 2012-07-16T16:44:33.230 回答