Nous essayons d'implémenter le glisser-déposer dans Silverlight (3). Nous souhaitons que les utilisateurs puissent faire glisser des éléments d'une arborescence vers une autre partie de l'interface utilisateur. L'élément parent est une grille, et nous avons essayé d'utiliser une TranslateTransform avec les événements MouseLeftButtonDown, MouseMove (etc), comme recommandé par divers exemples en ligne. Par exemple:TranslateTransform pour glisser-déposer dans Silverlight
http://www.85turns.com/2008/08/13/drag-and-drop-silverlight-example/
Nous faisons cela dans IronPython, mais cela ne devrait être plus ou moins hors de propos. Le début du glissement est correctement initié, mais l'objet que nous faisons glisser apparaît dans le mauvais emplacement (décalage de quelques centaines de pixels vers la droite et vers le bas depuis le curseur) et je ne peux pas déterminer pourquoi.
xaml de base:
<Grid x:Name="layout_root">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="120"/>
</Grid.RowDefinitions>
<Border x:Name="drag" Background="LightGray" Width="40" Height="15"
Visibility="Collapsed" Canvas.ZIndex="10">
<Border.RenderTransform>
<TranslateTransform x:Name="transform" X="0" Y="0" />
</Border.RenderTransform>
<TextBlock x:Name="dragText" TextAlignment="Center"
Foreground="Gray" Text="foo" />
</Border>
...
</Grid>
La méthode startDrag est déclenchée par l'événement MouseLeftButtonDown (sur un TextBlock dans un TreeViewItem.Header). onDrag est déclenché par MouseMove. Dans le self.root de code suivant est Application.Current.RootVisual (élément d'interface utilisateur de niveau supérieur de app.xaml):
def startDrag(self, sender, event):
self.root.drag.Visibility = Visibility.Visible
self.root.dragText.Text = sender.Text
position = event.GetPosition(self.root.drag.Parent)
self.root.drag.transform.X = position.X
self.root.drag.transform.Y = position.Y
self.root.CaptureMouse()
self._captured = True
def onDrag(self, sender, event):
if self._captured:
position = event.GetPosition(self.root.drag.Parent)
self.root.drag.transform.X = position.X
self.root.drag.transform.Y = position.Y
l'élément déplacé suit le mouvement de la souris, mais est considérablement décalée. Une idée de ce que je fais mal et comment le corriger?