2009-12-02 6 views
2

Я пишу небольшую функцию перетаскивания в проекте, над которым я работаю. Я делал этот тип функции несколько раз раньше, и я всегда использую комбинацию и PreviewMouseMove, чтобы обнаружить начало перетаскивания. Он всегда работал раньше.WPF: PreviewMouseMove не срабатывает при нажатии левой кнопки мыши?

В этом проекте, однако, я обнаружил, что PreviewMouseMove не срабатывает при нажатии левой кнопки мыши, хотя мышь явно движется по экрану. У меня никогда видел это раньше, и это заставляет меня грустить.

Это XAML я использую:

<Grid Background="{StaticResource BGGradientBrush}" 
     Margin="1" 
     PreviewMouseLeftButtonDown="Grid_PreviewMouseLeftButtonDown" 
     PreviewMouseMove="Grid_PreviewMouseMove"> 

     <!-- snip --> 
</Grid> 

И это мой код позади:

private Point _startDragPoint; 
    private bool _isDragging; 

    private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     _startDragPoint = e.GetPosition(null); 
     System.Diagnostics.Trace.WriteLine("Test => (PreviewMouseLeftButtonDown) left click at " + _startDragPoint); 
    } 

    private void Grid_PreviewMouseMove(object sender, MouseEventArgs e) 
    { 
     System.Diagnostics.Trace.WriteLine("Test => (PreviewMouseMove) enter, e.LeftButton: " + e.LeftButton + ", _isDragging: " + _isDragging); 

     if (e.LeftButton == MouseButtonState.Pressed && !_isDragging) 
     { 
      System.Diagnostics.Trace.WriteLine(
       "Test => (PreviewMouseMove) well, the left mouse button is pressed"); 

      var position = e.GetPosition(null); 
      if (Math.Abs(position.X - _startDragPoint.X) > SystemParameters.MinimumHorizontalDragDistance || 
       Math.Abs(position.Y - _startDragPoint.Y) > SystemParameters.MinimumVerticalDragDistance) 
      { 
       StartDrag(); 
      } 
     } 
    } 

    private void StartDrag() 
    { 
     System.Diagnostics.Trace.WriteLine("Test => (StartDrag) started drag!"); 
    } 

Я мониторинг этих заявлений следовые через DebugView, и между временем Grid_PreviewMouseLeftButtonDown является , пока левая кнопка мыши не отпущена, Grid_PreviewMouseMove is never уволен.

Я совершенно озадачен, может ли кто-нибудь обнаружить что-то, что я делаю неправильно? Просто, чтобы здравомыслящий проверить себя, я имел в виду статью Jaime Rodriquez Drag & Drop in WPF Explained End to End, и я ясно использую ту же технику, что и он, так что может быть причиной этого? Я действительно надеюсь, что это просто что-то глупое, которого я пропускаю. Есть идеи?

ответ

2

Я использую Infragistics XamDataGrid для размещения моих пользовательских элементов управления, которым требуются функции перетаскивания. Оказывается, сетка прерывает события MouseMove при нажатии левой кнопки мыши. Довольно раздражает. Я не знаю, как это исправить или обойти, но, по крайней мере, я знаю, что происходит сейчас.

Смежные вопросы