1

我想让 Metro 用户控件可拖动。用户应该能够将它拖放到其他控件上,从而导致事情发生。如何实现此功能?

我发现唯一可行的方法是使用 GridView 和 ListView 控件。它们有一个“CanDragItems”属性,当它为真时,意味着视图中的任何项目都可以拖放。我尝试将我的控件包装在 gridview 或 listview 中,但它们以我不理解的方式干扰了布局。

我不想模仿操作系统提供的功能。我可以通过使用原始鼠标/点击事件来做到这一点,但它不会正确遵守系统设置,例如防止意外拖动的死区大小。

4

2 回答 2

0

我最终只是通过观察鼠标事件来模拟功能。我要求正在拖动的控件获得一个看起来相同但没有功能的“doppleganger”副本,将其放置在顶级网格上,并调整其渲染变换以移动它。

但是,请注意,如果我的要求略有不同,我可能能够使用操作模式/事件来做我想做的事。它们特别好,因为它们内置了惯性,但它们对焦点有点挑剔,我没有设法用它跨越父控件的界限。

于 2012-10-20T14:12:24.663 回答
0

我要说的是,您必须在 Grid 上创建一个附加属性并绘制一个连接到 MouseDown/MouseUp 事件的装饰器,然后从那里设置 Grid.Column 的 Width/Grid.Row 的高度。这将使 Grid 可拖动。

我不建议使用内置属性 ShowGridLines,因为它仅用于调试。如果需要,您可以尝试使用 Grid Splitters 并减少代码。

有关附加属性的更多信息,请参见此处附加属性

于 2012-08-01T13:28:12.133 回答