2009-06-30 48 views
10

爲了深入瞭解WPF MVVM,我目前的自由時間項目是一個我以前在童年時玩過很多遊戲的「數字」副本。它基本上是一個簡單的難題,人們必須用不同種類的部件填充給定的空間,這樣才能填滿整個空間。但隨着在六角空間的額外扭曲。WPF捕捉控件

只是爲了說明這一點,這是它目前看起來像WPF:

http://img190.imageshack.us/img190/2553/atomgridmolecule.png

所以基本上有一些預定義的塊(如上面的橙色一個),它可以「插入」給定的網格(上面的灰色東西)。

那麼結果可能是這個樣子:

http://img30.imageshack.us/img30/2553/atomgridmolecule.png

我希望用戶(大概只有我^^),以能夠拖動和碎片落入電網。我希望拖動具有正確偏移的自然含義,同時拖動取決於用戶點擊該部分的位置。

網格和分子都是相同的控件,這是一個從WPF Panel類派生的自定義六邊形面板控件。

問題在於如何做「插入」,特別是「拔掉」。

我有我怎樣處理這兩個想法:

  1. 不僅僅是簡單的顏色的單元網格和隱藏原片
    • 臨:中
      • 零成本完美對齊電池
    • 缺點:
      • 如果拖出的話,用正確的鼠標偏移量在正確的位置重新創建該片段似乎不可能?很難做到
  2. 捕捉片到電網,並顯示在頂部
    • 臨:
      • 拖出是一個簡單的拖動操作,就像在
    • 缺點:
      • 無論如何都必須對準該片與基礎網格,某種搶購

所以我應該採取哪種方法?更重要的是,我甚至可以在WPF中實現這個功能?特別是使用乾淨的MVVM方式。


非常感謝您的幫助!任何意見都非常感謝!編輯:
謝謝亞蘭,我也這麼認爲。

但是我現在怎麼實際執行這個?

  • 我怎樣才能真正獲得座標?
  • 所有的橙色圓圈都是相互關聯的,所以我怎樣才能「移動」或者更好地將它們「插」在一起?

回答

1

我傾向於第二個想法。一個簡單的捕捉就是測試你正在拖動的圓的中心點是否在網格上的一個圓的容忍因子之內,如果是的話就捕捉它們。

+1

我會這樣做 - 在後面的代碼中,觀察每個橙色圓上的結束鼠標單擊事件,然後將橙色圓圈x,y與所有灰色圓圈x,y的列表進行比較。通過調整橙色圓圈x,y來捕捉到最近的點。 – 2009-07-02 01:52:40