WPF: PreviewMoursemove لا يطلق النار عند الضغط على زر الماوس الأيسر؟

StackOverflow https://stackoverflow.com/questions/1834339

سؤال

أنا أكتب ميزة السحب والإفلات الصغيرة في المشروع الذي أعمل عليه. لقد فعلت هذا النوع من الميزات عدة مرات من قبل، وأنا دائما استخدام مزيج من PreviewLeftMouseButtonDown و 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 يكون أبدا مطرود.

أنا في حيرة تماما، هل يمكن لأي شخص بقعة شيء أفعله خطأ؟ فقط لحرية التحقق من نفسي كنت أشير إلى جايمي روبريكز أوضح السحب والإفلات في WPF نهاية إلى النهاية المادة وأنا أستخدم بوضوح نفس التقنية هو، إذن ما الذي يمكن أن يسبب هذا؟ آمل حقا أن يكون مجرد شيء غبي أفتقده. أيه أفكار؟

هل كانت مفيدة؟

المحلول

أنا أستخدم Infragistics Xamdatagrid لاستضافة عناصر تحكم المستخدم التي تتطلب وظيفة السحب والإفلات. اتضح أن الشبكة يفترض أحداث mousemove عند الضغط على زر الماوس الأيسر. مزعجة جدا. لست متأكدا من كيفية إصلاحه أو حلها، ولكن على الأقل أعرف ما الذي يحدث الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top