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 の読み込み時に呼び出されるため、文字列の長さに応じて非常に長くなります。

ローディング時に最初の 2 ページを生成し、次にユーザーがパンして次のページを読むときに生成するなど、いくつかのことを試しましたが、このソリューションでも、メソッドの呼び出し中にパン遷移が遅れます。

私はBackgroundWorkerクラスで仕事をすることを考えましたが、残念ながらUI自体にアクセスできないことがわかりました。たとえアクセスできたとしても、UIスレッドをブロックするか、少なくとも遅れます。

この方法は、フォントのサイズやフォントが使用するイベントとは無関係にテキストをフォーマットするため、この方法が「好き」です。これは、ページごとに固定数の文字を使用した以前のテストとは異なります (最大 700 文字のように、700 "i" ではありません)。 700 "m" と同じ高さと幅にしないでください)。

したがって、この問題に対する別の解決策があるかもしれません。プロジェクトにコピーして貼り付けるためのコードの塊を特に求めているわけではありません。このプロジェクトで実際に C# を学習しているので、自分で完全にコーディングすることを目指しています。

読んでくれてありがとう。英語は私の母国語ではないので、潜在的な文法や語彙の間違いをお詫びします.

フレンドリー、

4

1 に答える 1

0

Dispatcher.BeginInvoke 呼び出しを介して UI の変更を行うことができます。

それと進行状況の報告と、バックグラウンド ワーカーが完全に完了したとき以外に、できることはあまりないと思います。

コントロールは UI スレッドで作成されるため、そこから、または前述のメカニズムを介してのみアクセスできます。

于 2012-07-16T16:44:33.230 に答える