Мы пытаемся реализовать перетаскивание в Silverlight (3). Мы хотим, чтобы пользователи могли перетаскивать элементы из дерева в другую часть пользовательского интерфейса. Родительским элементом является Grid, и мы пытались использовать TranslateTransform вместе с событиями MouseLeftButtonDown, MouseMove (и т. Д.), Как рекомендовано различными онлайн-примерами. Например:
http://www.85turns.com/2008/08/13/drag-and-drop-silverlight-example/
Мы делаем это в IronPython, но это должно быть более или менее неактуально. Начало перетаскивания правильно инициировано, но элемент, который мы перетаскиваем, появляется в «неправильном» месте (смещено на несколько сотен пикселей вправо и вниз от курсора), и я не могу понять, почему. 1006 *
Basic xaml:
<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>
Метод startDrag запускается событием MouseLeftButtonDown (для TextBlock в TreeViewItem.Header). onDrag запускается MouseMove. В следующем коде self.root является Application.Current.RootVisual (элемент пользовательского интерфейса верхнего уровня из 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
Перетаскиваемый элемент следует за движением мыши, но значительно смещен. Есть идеи, что я делаю не так и как это исправить?