26

私のアプリでは、ユーザーは を選択してImageにドラッグし、Gridそれで遊ぶことができます。PointerEnteredのイベントを処理することでこれを行いGridます。ここでは、ユーザーが画像を選択したかどうか、およびユーザーがマウス ボタンを押しているかどうかを検出します。

ここImageで、 をグリッドに配置し、(まだ押し下げられている) ポインターを my に渡したいImageので、Imageは独自ManipulationStartedManipulationDeltaManipulationCompletedイベントを使用します。Gridこれにより、ユーザーは、要素を離してクリックする代わりに、画像のリストから に画像を 1 回のスムーズな動きでドラッグできるようになります。

senderinからポインタを解放し、PointerEnteredを使用してキャプチャしようとしましたが、が返さCapturePointerれても、うまくいかないようです。CapturePointertrue

PointerEnteredイベントに使用するコードは次のとおりです。

private void DrawingArea_OnPointerEntered(object sender, PointerRoutedEventArgs e)
{
    // If we enter the grid while dragging and we have an image that was dragged
    if (e.Pointer.IsInContact && CurrentDraggedImage != null)
    {
        DrawingArea.Children.Add(CurrentDraggedImage);

        // Move it to the location we're currently at
        var transform = (CurrentDraggedImage.RenderTransform as CompositeTransform);
        transform.TranslateX += e.GetCurrentPoint(DrawingArea).RawPosition.X - DrawingArea.ActualWidth / 2;
        transform.TranslateY += e.GetCurrentPoint(DrawingArea).RawPosition.Y - DrawingArea.ActualHeight/2;

        // This works (I think)
        (sender as UIElement).ReleasePointerCaptures();
        // This doesn't work (or it isn't what I need), but returns true
        CurrentDraggedImage.CapturePointer(e.Pointer);

        // Get ready for a new image
        CurrentDraggedImage = null;
    }
}

私の操作コードはこの回答にあります:

https://stackoverflow.com/a/32230733/1009013

4

1 に答える 1