Question

J'écris une petite fonction de glisser-déposer sur le projet sur lequel je travaille. J'ai fait ce type de fonctionnalité plusieurs fois auparavant, et j'utilise toujours une combinaison de PreviewLeftMouseButtonDown et PreviewMouseMove Pour détecter le début d'une traînée. Cela a toujours fonctionné avant.

Sur ce projet, cependant, je trouve PreviewMouseMove ne tire pas lorsque le bouton de la souris gauche est cliqué, même si la souris se déplace clairement à l'écran. J'ai jamais J'ai déjà vu cela et cela me rend triste.

C'est le xaml que j'utilise:

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

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

Et c'est mon code derrière:

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

Je surveille ces relevés de trace via Debugview, et entre le temps Grid_PreviewMouseLeftButtonDown est tiré, jusqu'à ce que le bouton de la souris gauche soit libéré, Grid_PreviewMouseMove est jamais licencié.

Je suis complètement perplexe, quelqu'un peut-il repérer quelque chose que je fais de mal? Juste à la santé mentale moi-même, je fais référence à Jaime Rodriquez Glisser-déposer dans WPF expliqué à bout Article et j'utilise clairement la même technique qu'il est, alors qu'est-ce qui pourrait être à l'origine? J'espère vraiment que c'est juste quelque chose de stupide qui me manque. Des idées?

Était-ce utile?

La solution

J'utilise une infragistics xamdatagrid pour héberger mes contrôles utilisateur qui nécessitent des fonctionnalités de glisser-déposer. Il s'avère que la grille emprisonne les événements Mousemove lorsque le bouton de la souris gauche est enfoncé. Assez irritant. Je ne sais pas comment le réparer ou le contourner, mais au moins je sais ce qui ne va pas maintenant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top