WPF: PreviewMouseMove не стреляет при нажатии кнопки мыши левой мыши?

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

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

Я полностью озадачен, может ли кто -нибудь заметить то, что я делаю не так? Просто проверьте себя здравомыслием, я имел в виду «Хайме Родрикес» Перетаскивание в WPF объяснил конец к концу Статья, и я явно использую ту же технику, что и он, так что может вызвать это? Я действительно надеюсь, что это просто что -то глупое, чего мне не хватает. Любые идеи?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top