私のアプリでは、ユーザーは を選択してImage
にドラッグし、Grid
それで遊ぶことができます。PointerEntered
のイベントを処理することでこれを行いGrid
ます。ここでは、ユーザーが画像を選択したかどうか、およびユーザーがマウス ボタンを押しているかどうかを検出します。
ここImage
で、 をグリッドに配置し、(まだ押し下げられている) ポインターを my に渡したいImage
ので、Image
は独自ManipulationStarted
のManipulationDelta
とManipulationCompleted
イベントを使用します。Grid
これにより、ユーザーは、要素を離してクリックする代わりに、画像のリストから に画像を 1 回のスムーズな動きでドラッグできるようになります。
sender
inからポインタを解放し、PointerEntered
を使用してキャプチャしようとしましたが、が返さCapturePointer
れても、うまくいかないようです。CapturePointer
true
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;
}
}
私の操作コードはこの回答にあります: