1

URLからかなり大きな画像をロードするスキャッタービューコントロールがあります。画像のサイズが異なり、画像が大きすぎて1つの画像を取得できない場合があり、半分を個別の画像としてダウンロードする必要があります。私は2つの半分を結合して、全体として表示および動作するようにしようとしています。私は2日間殺し、それを近づけましたが、完璧ではありません。私が試したこと:両方の半分をStackPanelに追加すると、ScatterViewItemでラップされます。何らかの理由で、パネルが高さよりもはるかに広い場合、SVIはそのサイズを適切に調整しません。SVIにコンテンツに合わせて高さ/幅を調整させるためのMSDNで提案されているスタイルなど、いくつか試してみました。ほとんどの場合にうまく機能しますが、画像が長くて狭い場合、画像のチャンクが切り取られます*(以下を参照)。

両方の半分をキャンバスに追加します。操作で適切にサイズ変更されていないようです。

両方の半分をグリッドに追加します。半分を取得して1つの画像を形成することはできません。不思議なことに、長い画像を含め、グリッド全体がSVIによって適切に表示されます。ただし、2つの半分は、それぞれの上にある(水平方向の整列なし)か、実際に離れている(列の定義を実行し、列0と1に設定する)か、ほぼ完全ですが、間に小さなギャップがあります(1つを左アラインと他を右アライン)。

*これまでのところ、StackPanelが最も有望なようです。SVI MinWidthを手動で設定することで全体を表示できますが、操作のためのコントロールのヒット領域は画像自体よりも大きくなります。私は画像のSizeChangedイベントを試してみて、画像が実際に読み込まれるときにSVIを動的に調整して、レンダリングされた幅の合計と等しくなるようにしましたが、今では科学よりもシャーマニズムになり始めています。私はこのことにランダムなコードを投げかけているところです。結果が何らかの有用性や洞察に役立つことを願っています。問題の一部は、画像がコンテナに追加され、SVIにラップされ、sviがスキャッタビュー自体に追加された後、画像ソースビットマップが実際にダウンロードされるまでに5秒かかる可能性があることです。各画像の高さはNaNですが、ビットマップの準備ができて画像がレンダリングされる前の実際の高さは87であることがわかります。これがスタックパネルとSVIのサイズにどのように影響するか、私にはよくわかりません。

ですから、私がいじくり回して何かが出てくることを期待している間に、誰かが試してみる洞察や提案を持っているかもしれません。

4

2 に答える 2

2

私は以前Microsoftで働いていて、ScatterViewコントロールの作成を担当していました。この質問には、実際には2つの部分があります。

まず、ScatterViewItemのサイズがおかしいのはなぜですか?ScatterViewItemsはコンテンツに基づいて自動サイズ設定しますが、その際に2つの制限を適用します。a)ユーザーがアイテムを快適につかんでサイズを変更できるように、初期の高さと幅が十分に大きいこと。b)初期の高さと幅が十分に小さいことアイテムは画面の各寸法の最大20%しか占めておらず、他のアイテムが表示される余地があります。自分でHeight&Widthプロパティを明示的に設定すると、これらの動作の両方をオーバーライドできます。

次に、複数の画像を1つのScatterViewItemに結合するための最良の方法は何ですか?結合された画像のサイズである単一のWriteableBitmapを作成することをお勧めします。これをScatterViewItemに入れます。次に、各イメージチャンクがダウンロードされるときに、そのチャンクをWriteableBitmapに挿入します。これにより、パフォーマンスが向上し、継ぎ目に沿って表示される目に見えるアーティファクトの問題が発生しなくなります。

于 2011-07-14T13:10:53.280 に答える
0

StackPanelがほぼ機能しているが、サイズ設定に問題がある場合は、代わりにDockPanelを使用してみてください。

StackPanelは、その方向の方向に子のサイズを制限しないため、その方向のサイズは事実上無限であり、説明している奇妙なサイズ設定動作のタイプを引き起こす可能性があります(これが通常、子がListBoxのようなScrollViewer)。

すべてのアイテムが同じDockPanel.Dock設定を使用する場合、DockPanelは同じ種類のスタッキング動作を実行しますが、親レイアウトに基づくサイズ制限があります。GridとStackPanelが行っていることを適切に組み合わせることができるかもしれません。

グリッドは正しく設定されていれば機能する可能性があります。グリッドが表示されない場合は、2つの自動行または列があり、両方の画像の水平方向と垂直方向の配置がストレッチに設定されていると機能する可能性があります。画像がSVIを満たさないときに空のスペースを使い果たす必要がある場合は、追加の空の*行または列も必要になる場合があります。

于 2011-07-12T23:56:12.523 に答える