2009-06-30 73 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