WPF捕捉控件

时间:2009-06-30 12:19:37

标签: 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. 将棋子贴在网格上并将其显示在顶部
    • 临:
      • 拖出是一个简单的拖动操作,就像拖入
      • 一样
    • 缺点:
      • 不知何故必须将这件作品与底层网格对齐,某种对齐方式

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


    非常感谢你的帮助!任何意见都非常感谢!

    编辑:
    谢谢Aran,我也这么认为。

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

    • 我怎样才能真正得到坐标?
    • 所有橙色圆圈都是链接的,那么我怎样才能“移动”或更好地“插入”它们作为一个整体?

1 个答案:

答案 0 :(得分:1)

我倾向于选择第二个想法。一个简单的捕捉就是测试你拖动的圆的中心点是否在网格上一个圆的公差因子内,如果是这样的话就会捕捉它们。