2017-08-09 1 views
0

Donc, fondamentalement, j'ai suivi this par exemple pour créer mon propre Drag & Drop. Je veux être capable de faire glisser un objet d'une vue à une autre (UserControls à l'intérieur de MainWindow) et le placer à l'emplacement actuel de la souris par rapport à la vue dans laquelle j'ai laissé tomber mon élément.Comment obtenir la MousePosition lors d'un glisser-déposer? (WPF-MVVM)

J'ai essayé en utilisant ce code dans mon FrameworkElementBehavior:

private void AssociatedObject_Drop(object sender, DragEventArgs e) 
    { 
     CanItDropHere(e, 
      canDrop:() => 
      { 
       var type = _allowedDropTypes.First(t => e.Data.GetDataPresent(t)); 
       var draggedItem = e.Data.GetData(type) as IDragable; 
       var position = e.GetPosition(App.Current.MainWindow); 

       var droppedOn = AssociatedObject.DataContext as IDropableWithMousePos; 
       droppedOn?.Drop(draggedItem,position); 
      }); 


     e.Handled = true; 
    } 

Cependant ici, je reçois la position de la souris par rapport à mon MainWindow. Cela conduit au problème que l'objet est dopé avec un décalage qui est évident. Cependant, je n'ai aucune idée de comment obtenir la position réaliste à la vue dans laquelle je laisse tomber.

Répondre

0

Solution de travail:

var position = e.GetPosition(sender as IInputElement);