我想让一个Metro用户控件可拖动。用户应该能够将其拖放到其他控件上,从而导致事情发生。如何实现此功能?
我发现的唯一方法是使用GridView和ListView控件。它们具有'CanDragItems'属性,当为true时,表示可以拖放视图中的任何项目。我尝试将我的控件包装在gridview或listview中,但它们会干扰ways I don't understand中的布局。
我不想模拟操作系统提供的功能。我可以通过使用原始鼠标/点击事件来做到这一点,但是它不能正确地考虑系统设置,例如死区的大小,以防止意外拖动。
答案 0 :(得分:0)
我要说的是你必须在网格上创建一个附加属性并绘制一个可以连接到MouseDown / MouseUp事件的装饰器,从那里设置Grid.Column的Width / Grid.Row的高度。这将使Grid可以拖动。
我不建议使用内置属性ShowGridLines,因为它仅用于调试。如果需要,可以尝试使用网格分割器,减少代码。
有关附加属性的更多信息,请参见Attach Properties
答案 1 :(得分:0)
我最终只是通过观看鼠标事件来模拟功能。我要求控件被拖动为一个看起来相同但没有功能的'doppleganger'副本,将它放在顶层网格上,并调整其渲染变换以移动它。
但请注意,如果我的要求略有不同,我可能已经能够使用操作模式/事件来做我想要的事情。它们特别好,因为它们具有内置的惯性,但它们对于焦点有点挑剔,我没有设法与它跨越父控制边界。