取消ManipulationStarting事件以防止拖放

时间:2012-12-17 21:28:02

标签: c# drag-and-drop windows-runtime routed-events

有几个事件涉及操纵(因此拖放):

  • ManipulationStarting
  • 在ManipulationStarted
  • 在ManipulationDelta
  • 在ManipulationInertiaStarting
  • 在ManipulationCompleted

在ManipulationStarting事件中,事件args(类型ManipulationStartingRoutedEventArgs)允许我将Mode属性设置为ManipulationModes.None - 这是否正确,这意味着不允许任何操作,因此没有拖放?

我问,因为当我和官方XAML user input events sample application一起玩时,我遇到了一种奇怪的行为,尤其是情景4(拖放)。

只需在Scenario4.xaml.cs的ManipulationStarting事件中将Mode设置为ManipulationModes.None:

void ManipulateMe_ManipulationStarting(object sender, ManipulationStartingRoutedEventArgs e)
{
    forceManipulationsToEnd = false;
    e.Mode = ManipulationModes.None;   // <-- this is new
    e.Handled = true;
}

尽管如此,每尝试三次拖动,我都可以拖动矩形。我录制了一段视频来证明这一点:http://www.youtube.com/watch?v=psytuTailHg

此问题不仅发生在此示例中,也发生在我自己的应用程序中。

问题:

  • 为什么会有这么奇怪的行为?
  • 取消拖放事件的最佳方法是什么(例如,如果不符合某些条件)?

1 个答案:

答案 0 :(得分:1)

例如,在gridview上,您可以实现DragItemStarting事件,并设置e.Cancel = true;以防止此行为 - 这不符合您的需求吗?