WPF捕捉控件

eri*_*ric 10 c# wpf controls

我现在的空闲时间项目,为了深入WPF MVVM,是我童年时常玩的旧拼图的"数字"副本.它基本上是一个简单的拼图,其中一个必须用不同类型的碎片填充给定的空间,以便整个空间被填充.但随着六角形空间的额外扭曲.

只是为了说明,这就是WPF目前的样子:

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

因此,基本上有许多预定义的部分(如上面的橙色部分)可以"插入"给定的网格(上面的灰色部分).

所以结果看起来像这样:

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

我希望用户(可能只有我^^)能够将碎片拖放到网格中.我希望拖动看起来自然意味着在拖动时具有正确的偏移量取决于用户单击该块的位置.

网格和分子都是相同的控件,来自WPF Panel类的自定义六边形面板控件.

问题在于如何进行"插入",特别是"拔出".

我有两个关于如何解决这个问题的想法:

  1. 只需为网格中的单元格着色并隐藏原始单元
    • 优点:
      • 零成本完美的细胞排列
    • 缺点:
      • 如果拖出来,使用正确的鼠标偏移在正确的位置重新创建一块,似乎不可能?难做
  2. 将片断贴在网格上并将其显示在顶部
    • 优点:
      • 拖出是一个简单的拖动操作,就像拖入一样
    • 坏处:
      • 不知何故必须将这件作品与下面的网格对齐,某种对齐方式

那我应该采取哪种方法?更重要的是我如何在WPF中实现这一点?特别是使用干净的MVVM方式.


非常感谢你的帮助!任何输入都非常感谢!

编辑:
谢谢阿兰,我也这么认为.

但是我现在该如何实现呢?

  • 我怎样才能真正得到坐标?
  • 所有的橙色圆圈都是相互关联的,那么我如何"移动"或更好地"插入"它们作为一个整体呢?

Ara*_*and 1

我倾向于第二个想法。一个简单的捕捉只是测试您拖动的圆的中心点是否在网格上圆的某个公差因子内,如果是,则捕捉它们。