0

さまざまなサイズと複雑さの多数のコントロールを使用して、大量のデータを表示するコントロールがあります。レイアウトする必要があるコントロールが大量にあるため、非常に顕著な遅延が発生する可能性があります。

タイミングコードでそれらをオーバーライドするスタックパネルから派生するテストクラスがあるため、遅延は測定/配置関数に起因することがわかっています。

スクロールバーの範囲が常に変化するという副作用があるため、仮想化を使用したくありません。また、クライアントがすべてを 1 つの長いリストに表示するように要求したため、エキスパンダーやその他の折りたたみコントロールの下にデータを隠したくありません。ただし、彼らは、遅延が発生したときにコントロールが実際に何かを行っていること、つまりある種の進行状況を知りたいと考えています。

だから私の質問は - コンテンツが実際にレイアウトされるまで、ローディングアニメーションを装飾または何かとして表示するコントロールを作成する方法はありますか? 配置/測定もUIスレッドで行われるため、これはおそらく不可能です。

4

1 に答える 1

0

私の経験では、残念ながら答えはノーと言わざるを得ません。非常によく似た問題の解決策を見つけるのに長い時間を費やしました。

問題の核心は、UI コントロールにデータを入力する作業はすべてUI スレッドで実行する必要があることです。アプリケーション内のすべてのデータは、「UI を解放する」ために非同期的に取得されます...これがバックグラウンド スレッドで発生している間、UI スレッドはアニメーション化された読み込みイメージを自由に表示できます。ただし、データが到着して UI コントロールへの入力が開始されるとすぐに、ロード アニメーションがフリーズします。

UI スレッドでは時間がかからないと思っていたので、.gif 画像を使用してみましたが、残念ながら、WPF は .gif アニメーションをサポートしていません。.gif ファイルの各フレームを順番にアニメーション化するクラスを設計し、もう一度試してみましたが、(手動の) .gif アニメーションUI スレッド時間を使用していたため、コントロールが入力されているときにフリーズしました。

したがって、残されたオプションは次のとおりです。

  1. データがコントロールまたは
  2. アニメーション化されていない読み込み画像/形状を表示する

データが読み込まれる最後の瞬間にフリーズするアニメーション バージョンを選びました。

于 2013-08-15T12:25:31.450 に答える