2010-03-23 49 views
0

我有一個應用程序,創建一個可變數量的ScatterviewItems基於哪個標記的對象放置在曲面表上。均勻distibuted不重疊scatterViewItems不重疊

的ScatterViewItems被編程添加到基於信息的ScatterView擡頭的DB

的Scatterview不顯示此信息

但是一個良好的工作,我想他們是

  1. 均勻分佈在整個表格中並且

  2. 沒有任何項目重疊

任何想法如何做到這一點?

回答

0

聽起來像你需要碰撞檢測。

這個問題有兩個部分:檢測和解決。檢測是看看任何物品的邊界是否與任何其他物品的邊界相交。如果這些物品是直線形或圓形的,這是相當簡單的。如果您正在處理其他幾何圖形,它會變得複雜。

Resoltion是一旦您檢測到碰撞後要做什麼。谷歌將幫助你找到無數的算法。以下是一些鏈接到stackoverflow討論:WPF: Collision Detection with Rotated Squares,Applying Coefficient of Restitution in a collision resolution methodBest way to detect collision between sprites?

您可以實施碰撞以使物品在散射時相互分離。根據物品數量的不同,這可能會造成非常多的碰撞,導致物品散落不好。如果發生這種情況,只需運行碰撞檢測一個項目已停止移動。

0

UniformGrid

您也可以通過從Panel開始創建自己的面板。 在Dr. WPF ItemsControl使用指南系列中您可以找到一些超級有價值的信息:http://drwpf.com/blog/itemscontrol-a-to-z/

這是一段必讀內容。

+0

謝謝 - 我會檢查你的參考。 我需要使用ScatterView,因爲這可以方便地處理曲面表上的項目。 uniformGrid不允許該操作。只需要弄清楚如何防止ScatterViewItems在第一次加載時不重疊 – ChrisCa 2010-03-23 17:29:21

0

ScatterViewItem具有屬性中心和方向,您可以使用它編程定位項目。如果你知道每個物品的尺寸,你應該能夠使用這些屬性來定位它們,無論哪種方式都適合你的情況。通過鉤住每個Loaded事件並檢查ActualWidth/ActualHeight,可以獲取尺寸。如果您可以爲所有SVI使用固定的初始大小,那更容易。

你可以通過計算一個簡單的網格(加上一些隨機性使它看起來更自然)來佈置它們,或者你可能正在尋找所謂的「力導向佈局」,它給每個對象一個相對於它的大小。過了一段時間,元素自然會相互均勻分佈,儘管它們在空間不足時仍然可能會重疊。我還沒有看到WPF的例子,但請參閱flare.prefused.org/demo(layout> force)來表達我在Flash中的意思。