質問

私が取り組んでいるプロジェクトに小さなドラッグアンドドロップ機能を書いています。私はこのタイプの機能を数回以前に行ってきましたが、常にの組み合わせを使用しています PreviewLeftMouseButtonDownPreviewMouseMove ドラッグの開始を検出します。それはいつも以前に機能していました。

しかし、このプロジェクトでは、私は見つけています 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のドラッグアンドドロップは、端から端まで説明しました 記事と私は明らかに彼と同じテクニックを使用しているので、何がこれを引き起こす可能性がありますか?私はそれが私が行方不明になっている愚かなものであることを本当に望んでいます。何か案は?

役に立ちましたか?

解決

インフラジスティクスxamdatagridを使用して、ドラッグアンドドロップ機能を必要とするユーザーコントロールをホストしています。左マウスボタンが押されたときに、グリッドがMousemoveイベントをトラップすることがわかります。かなりいらいらします。それを修正する方法やそれを回避する方法はわかりませんが、少なくとも今何がうまくいかないか知っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top