在 Metro 风格的应用程序中,我定义了一个自定义控件并将它们的几个实例放置在一个 Grid 中。使用户能够将控件从网格的一个单元格拖放到另一个单元格的最佳方法是什么?
问问题
628 次
1 回答
1
这取决于你想要达到的目标。从我的角度来看 - 最好的方法是实现一个行为,以便您可以在 UI 的不同位置重用它,并可能与其他人共享它。从您的角度来看 - 最好的方法可能是您执行自定义实现的最简单方法,该实现将绑定到承载您的网格的 Page/UserControl。
如果您询问如何进行拖放部分 - 您可以将自定义控件上的 ManipulationMode 设置为 TranslateX、TranslateY 并处理 ManipulationStarted 事件,您可以将控件移动到全屏或网格大小的弹出窗口并移动它在 ManipulationDelta 事件中通过更新 Margin、Canvas 或 RenderTransform 属性,然后最后在 ManipulationCompleted 上 - 将其放入符合您的条件的单元格中。
您将使用 Popup 来确保您的自定义控件被拖到其他任何东西上。
要计算 Grid 和 Popup 之间的位置,您可以使用 grid.TransformToVisual(popup).TranformPoint() 之类的东西。
您还可以做一些事情来突出显示控件在释放时将下降的网格中的候选目标单元格。
于 2012-12-09T06:34:35.033 回答