문제

내가 작업중 인 프로젝트에 작은 드래그 앤 드롭 기능을 작성하고 있습니다. 이 유형의 기능을 여러 번 수행했는데 항상 조합을 사용합니다. 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 ~이다 절대 해고.

나는 완전히 당황했다. 누군가 내가 잘못하고있는 일을 발견 할 수 있습니까? 제 정신을 확인하기 위해 나는 Jaime Rodriquez의 것을 언급하고 있습니다. WPF의 드래그 앤 드롭은 끝까지 설명했다 기사와 나는 그가 동일한 기술을 분명히 사용하고 있으므로 무엇을 일으킬 수 있습니까? 나는 그것이 내가 놓친 바보 같은 무언가를 바라고 정말로 바라고있다. 어떤 아이디어?

도움이 되었습니까?

해결책

드래그 앤 드롭 기능이 필요한 사용자 컨트롤을 호스팅하기 위해 Infragistics XAMDATAGRID를 사용하고 있습니다. 왼쪽 마우스 버튼을 누르면 그리드가 MouseMove 이벤트를 가두는 것으로 나타났습니다. 꽤 자극적입니다. 나는 그것을 고치거나 그것을 해결하는 방법을 잘 모르겠지만 적어도 지금은 무엇이 잘못되고 있는지 알고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top