Domanda

Sto scrivendo una piccola funzione di trascinamento del progetto su cui sto lavorando. Ho fatto questo tipo di funzione più volte prima e uso sempre una combinazione di PreviewLeftMouseButtonDown e PreviewMouseMove Per rilevare l'inizio di una resistenza. Ha sempre funzionato prima.

In questo progetto, però, sto trovando PreviewMouseMove non si sta sparando quando si fa clic sul pulsante del mouse sinistro, anche se il mouse si muove chiaramente sullo schermo. Io ho mai Ho visto questo prima e questo mi sta rendendo triste.

Questo è lo xaml che sto usando:

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

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

E questo è il mio codice dietro:

    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!");
    }

Sto monitorando quelle tracce tramite DebugView e tra il tempo Grid_PreviewMouseLeftButtonDown viene sparato, fino a quando il pulsante sinistro del mouse non viene rilasciato, Grid_PreviewMouseMove è mai licenziato.

Sono completamente perplesso, qualcuno può individuare qualcosa che sto sbagliando? Solo per controllarmi da sanità me stesso mi sono riferito a Jaime Rodriquez Drag & Drop in WPF spiegato da un capo all'altro Articolo e sto chiaramente usando la stessa tecnica che è, quindi cosa potrebbe causare questo? Spero davvero che sia solo qualcosa di stupido che mi manca. Qualche idea?

È stato utile?

Soluzione

Sto usando un xamdatagrid infragistico per ospitare i miei controlli utente che richiedono funzionalità di trascinamento. Si scopre che la griglia intrappola gli eventi mousemove quando viene premuto il pulsante del mouse sinistro. Piuttosto irritante. Non sono sicuro di come risolverlo o aggirarlo, ma almeno so cosa non va storto ora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top