どのタグ付きオブジェクトがサーフェステーブルに配置されているかに基づいて、可変数のScatterviewItemを作成するアプリがあります。
ScatterViewItemsは、DBで検索された情報に基づいて、プログラムでScatterViewに追加されます。
Scatterviewは、この情報をうまく表示します
しかし、私は彼らになりたいです
テーブル全体に均等に分散し、
重複するアイテムはありません
それを行う方法はありますか?
どのタグ付きオブジェクトがサーフェステーブルに配置されているかに基づいて、可変数のScatterviewItemを作成するアプリがあります。
ScatterViewItemsは、DBで検索された情報に基づいて、プログラムでScatterViewに追加されます。
Scatterviewは、この情報をうまく表示します
しかし、私は彼らになりたいです
テーブル全体に均等に分散し、
重複するアイテムはありません
それを行う方法はありますか?
ScatterViewItem には、項目をプログラムで配置するために使用できるプロパティ Center と Orientation があります。各アイテムのサイズがわかっている場合は、これらのプロパティを使用して、状況に最適な方法でアイテムを配置できるはずです。それぞれの Loaded イベントにフックし、ActualWidth/ActualHeight をチェックすることで、寸法を取得できます。すべての SVI に固定の初期サイズを使用できる場合は、さらに簡単になります。
単純なグリッド (より自然に見えるようにするためのランダム性を追加) を計算してそれらをレイアウトすることも、各オブジェクトにそのサイズに応じた反発力を与える、いわゆる「力指向レイアウト」を探していることもあります。しばらくすると、要素は自然に互いに均等に配置されますが、スペースがなくなると重なり合う可能性があります。これの WPF の例は見たことがありませんが、Flash での意味については、flare.prefused.org/demo (layout > force) を参照してください。
衝突検出が必要なようです。
この問題には、検出と解決という 2 つの部分があります。検出は、アイテムの境界が他のアイテムの境界と交差するかどうかを確認しています。アイテムが長方形または円形の場合、これは非常に簡単です。他のジオメトリを扱っている場合、複雑になる可能性があります。
解決とは、衝突を検出した後に行うことです。Google は、このための無数のアルゴリズムを見つけるお手伝いをします。スタックオーバーフローの議論へのリンクは次のとおりです: WPF: 回転した正方形による衝突検出、衝突解決方法での反発係数の適用、スプライト間の衝突を検出する最良の方法? .
衝突を実装して、アイテムが散乱するときにアイテムが互いに跳ね返るようにすることができます。アイテムの数によっては、衝突が多すぎてアイテムがうまく分散しない場合があります。これが発生した場合は、衝突検出を実行するだけで、1 つのアイテムが動かなくなってしまいます。
UniformGrid
?
から継承して独自のパネルを作成することもできますPanel
。Dr. WPF ItemsControl ハウツー シリーズで、非常に貴重な情報を見つけることができます: http://drwpf.com/blog/itemscontrol-a-to-z/
それは必読です、期間。